指定类的样式
自己定义了一个类ImageLayer,然后想把特定的样式应用到ImageLayer,可以把如下代码加入app
<Style x:Name="ImageLayerStyle" TargetType="layer:ImageLayer">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="layer:ImageLayer">
<Canvas>
<Grid x:Name="RootElement" MinWidth="48">
<Grid.RenderTransform>
<ScaleTransform x:Name="_ScaleTransform" ScaleX="1" ScaleY="1"/>
</Grid.RenderTransform>
<Image x:Name="imageName" Stretch="None" Width="48" Height="48" HorizontalAlignment="Center"></Image>
</Grid>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后在类ImageLayer初始化函数中加入以下代码
this.Style = Application.Current.Resources["ImageLayerStyle"] as Style;
就可以把ImageLayerStyle样式应用到ImageLayer。
同时还可以不指定name,作为默认样式应用,不过会有一点麻烦
需要进行如下设置
在Silverlight Application下建立一个Themes目录, 创建generic.xaml文件(其它文件名称无法实现). 将指定TargetType的Style移动到generic.xaml. 这个概念是沿用WPF创建自定义控件时的技巧(WPF运行时engine会自动查找generic.xaml并将Style应用到控件实例), 在Silverlight中一样可以使用.
如果是想要继承默认样式怎么办呢
1 支持设置全局样式,也就是所有button的style,这个style里可以设置button的公共样式,比如大小拉,颜色啦,字体拉等等。
2 针对个别的button,可以设置自己的style,但是这个style是基于1中style的
解决方法:
1 设置一个全局带key的style,
<Style x:Key="CustomButton" TargetType="Button">
<!--在这里设置全局的style-->
</Style>
看到这困惑了把,这个带key的style用到全局,一个一个加key?nono
2 设置一个不带key的style,并且这个style继承上边的全局style
<Style TargetType="Button" BaseOn="{CustomButton}">
</Style>
这样,所有的button的style,默认就是来自于CustomButton。
3 针对特殊的style,设置带key的style,并BaseOn="{CustomButton}"