2011-01-19 5 views
0

Во-первых, я сожалею о своем английском. Надеюсь, вы понимаете мою проблему (исправления приняты, и следующий пост будет более правильным).Создайте шаблон кнопки программно

ОК, это мой сценарий: разработка для 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. Я не знаю, как настроить стили для разных состояний кнопок и радиуса границы.

Если кто-нибудь может мне помочь ... Спасибо за чтение,

+0

Это просто хороший способ это возможно, но назначение TemplateProperty по контролю заменит весь шаблон кнопки, так что в основном вы в конечном итоге создаете шаблон с нуля в коде. Свойство TargetType для PropertyDescriptor используется парсером Xaml. Вы должны рассмотреть возможность размещения шаблона в xaml и просто назначить его при необходимости или даже лучше использовать механизм триггеров, чтобы вы могли изменить такие свойства. Позвольте мне знать, как вам нравится, и я отправлю код. – baalazamon

+0

Создание элемента управления в коде также имеет еще один недостаток. Silverlight не имеет FrameworkElementFactory, и единственный способ создать шаблон - это XamlReader.Load, поэтому вы получите xaml в файле cs или прочитаете его файл формы. – baalazamon

+1

Почему вы не можете использовать xaml? –

ответ

Смежные вопросы