2011-01-19 77 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属性用于Xaml解析器使用的PropertyDescriptor。您应该考虑在xaml中放置模板,并在必要时分配它,或者更好地利用Triggers机制,以便更改这些属性。让我知道你喜欢哪种方式,我会发布代码。 – baalazamon 2011-01-19 18:26:51

+0

在代码中创建控件还有一个缺点Silverlight没有FrameworkElementFactory,并且创建模板的唯一方法是XamlReader.Load,因此您最终将使用cam文件中的xaml或读取它的形式文件。 – baalazamon 2011-01-19 19:19:05

+1

为什么你不能使用xaml? – 2011-01-19 19:50:19

回答

相关问题