当创建了一个自定义控件之后,由于不能在代码中写样式代码,也无法在控件运行时候指定Template,为了解决这个问题可以使用Generic.xaml来实现。
Generic.xaml可以作为一个资源字典来理解,在其里边写自定义的模板或者是样式,下面看看怎么使用:
1.首先在Silverlight Application(Application Class library)右键添加文件夹,键入名字Theme(必须是这个)
2.右键Theme文件夹新建文件,选择XML文件模板,写入名字 Generic.xaml(必须)
3.打开Generic.xaml文件 键入代码
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProSilverlight.Template;assembly=ProSilverlight">
<Style TargetType="local:FlipPanel">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:FlipPanel">
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
可以看到就是一个资源字典,其中xmlns:local是该例子中要进行设置样式的类的所在namespace的引用;在字典中同样还是我们熟悉的Style的编码,可以看到TargetType的值就是一个自定义的Control(当前自定义Control基类为Control,可以自行创建)。
到此,样式的工作已经完成,还差最后一步。
4.在自定义Control指定默认样式:
public FlipPanel()
{
this.DefaultStyleKey=typeof(FlipPanel);
}
没错,就是在自定义控件的构造函数中,指定DefaultStyleKey属性就搞定了。