Во-первых, я сожалею о своем английском. Надеюсь, вы понимаете мою проблему (исправления приняты, и следующий пост будет более правильным).Создайте шаблон кнопки программно
ОК, это мой сценарий: разработка для Windows Phone 7. Я не могу использовать шаблоны XAML. Мне нужно создать шаблон во время выполнения с кодом C#. Единственными элементами, которые мне нужно настроить, являются цвета фона и переднего плана в неактивном состоянии, а также когда пользователь удерживает кнопку и закругленный угол для границы.
Настройка Button.Style
свойство работает только для сохранения состояния по умолчанию (неактивной), и я не могу создать радиус угла:
Style buttonStyle = new Style(typeof(Button);
buttonStyle.Setters.Add(new Setter(Button.BackgroundProperty, new SolidColorBrush(Colors.Blue));
buttonStyle.Setters.Add(new Setter(Button.ForegroundProperty, new SolidColorBrush(Colors.White)));
Button myBytton = new Button();
myButton.Style = buttonStyle;
Следующим шагом было создание CustomTemplate для свойства Button.Template, но всегда вызывает исключение:
CustomTemplate myTemplate = new CustomTemplate();
myTemplate.TargetType = typeof(Button); // Exception raises here: InvalidOperationException wihtout more info
(..Continues код ...)
Button myBytton = new Button();
myButton.Template = myTemplate;
Все примеры, которые я просматривал, использовали XAML для CutomTemplate. Я не знаю, как настроить стили для разных состояний кнопок и радиуса границы.
Если кто-нибудь может мне помочь ... Спасибо за чтение,
Это просто хороший способ это возможно, но назначение TemplateProperty по контролю заменит весь шаблон кнопки, так что в основном вы в конечном итоге создаете шаблон с нуля в коде. Свойство TargetType для PropertyDescriptor используется парсером Xaml. Вы должны рассмотреть возможность размещения шаблона в xaml и просто назначить его при необходимости или даже лучше использовать механизм триггеров, чтобы вы могли изменить такие свойства. Позвольте мне знать, как вам нравится, и я отправлю код. – baalazamon
Создание элемента управления в коде также имеет еще один недостаток. Silverlight не имеет FrameworkElementFactory, и единственный способ создать шаблон - это XamlReader.Load, поэтому вы получите xaml в файле cs или прочитаете его файл формы. – baalazamon
Почему вы не можете использовать xaml? –