Silverlight技术之Style和StaticResource
了解并使用Silverlight就不得不提到Style和StaticResources,简单的Style应用大家都知道,本篇重点讲解,怎么在控件上同时指定两个样式?怎么使用StaticResource设置一个固定的集合,即将一个固定的集合列表绑定到控件上?下边直接开始相关的应用示例,先说第一个Style设置Button按钮,第一个Button样式设置其FontSize,Foreground,FontWeight。同时又想指定另外一个样式Margin和Content,这时就要在一个控件上指定两个样式,在SL中实现方式如下:
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Fontweight" Value="bold"/>
</Style>
具体到一个按钮中,添加对其样式的引用
<Button Style="{StaticResource ButtonStyle}" Content="确定"></Button>
但此时如果我们还想对Button指定其他样式,我们该怎么办呢?在Silverlight的Style中,指定了Baseon属性,可以继承一个样式,于是当需要重复只用样式时就可以这样再指定一个,但缺点之一是baseon只能在一个样式中使用一次,添加一个新样式CustomBtn,代码如下:
<Style TargetType="Button" x:Key="CustomBtn" BaseOn="ButtonStyle">
<Setter Property="Margin" Value="4,0,4,0"/>
<Setter Property="Content" Value="自定义确定"/>
</Style>
好了,至此这个按钮将同时具有上文所定义ButtonStyle和CustomBtn指定的样式。关于Style说明如下几点:
1、像Web网页一样,把常用的样式提取出来,定义到单独的样式文件中,在需要的界面上添加对应文件的引用,这样便于管理,重用和修改
2、可以设置默认样式,隐式应用到各控件,主要是指定TargetType
3、样式就近生效,在Style文件中和界面上分别指定Content,在界面的更靠近展现控件,因此覆盖在Style中定义的Content
4、目前的样式有,控件样式,界面样式和全局样式。
简单说明这么多,具体到应用中不清楚的可以再查询相关资料。
第二个问题,定义StaticResource,在实际应用中,常常有一些固定的下拉列表,如这个场景->证件类型:有身份证,护照,军官证,港澳台证等
这些内容是固定的,内容较少不适应划分数据表存在数据库中,直接书写在界面上吧,如果多个界面都使用此列表呢,重复的代码,还容易把顺序搞乱,于是考虑
能否在StaticResource中得以应用。然后每个界面使用时对应的绑定即可。
经分析可以的,首先定义实体吧,此类信息都具有name,Value两个属性,直接声明相关类,然后在指定一个列表把需要的字段都添加进去,注意此时类需要
具备IEnumerate接口,因为在绑定资源时,他要进行迭代显示,因此我们显式实现此接口。完成此此类后,接下来就是在界面上添加对应的应用,然后进行
绑定呈现,经验证,效果符合预期。这样相关使用此列表的界面都能保证数据一致,而且不用在每个列表中单独的定义。
如果不使用资源绑定,在界面上单独书写,代码如下:
<ComboBox>
<ComboBoxItem Content="请选择证件类型" />
<ComboBoxItem Content="A.身份证" />
<ComboBoxItem Content="B.军官证" />
<ComboBoxItem Content="C.护照" />
<ComboBoxItem Content="D.港澳台居民证件" />
<ComboBoxItem Content="E.其他" />
</ComboBox>
每个使用的界面,都要单独这样定义,如果使用列表后,则可以单独书写如下代码:
<Grid.Resources>
<Options:CardType x:Name="SlCardType"></Options:CardType>
</Grid.Resources>
<!--省略其它代码-->
<ComboBox x:Name="cmbCardType" Style="{StaticResource CmbStyle}" ItemsSource="{StaticResource SlCardType}" DisplayMemberPath="Name" SelectedValuePath="Value" />
以上代码就简单实现了资源的绑定,在多界面都需要使用此列表中,尤为有效,如果只单独一个界面使用,效果不太明显。
此上为个人的方法,大家有好的建议和意见可以交流一下。