了解并使用Silverlight就不得不提到Style和StaticResources,简单的Style应用大家都知道,本篇重点讲解,怎么在控件上同时指定两个样式?怎么使用StaticResource设置一个固定的集合,即将一个固定的集合列表绑定到控件上?下边直接开始相关的应用示例,先说第一个Style设置Button按钮,第一个Button样式设置其FontSize,Foreground,FontWeight。同时又想指定另外一个样式Margin和Content,这时就要在一个控件上指定两个样式,在SL中实现方式如下:
< Setter Property = " Foreground " Value = " Red " />
< Setter Property = " FontSize " Value = " 14 " />
< Setter Property = " Fontweight " Value = " bold " />
</ Style >
具体到一个按钮中,添加对其样式的引用
但此时如果我们还想对Button指定其他样式,我们该怎么办呢?在Silverlight的Style中,指定了Baseon属性,可以继承一个样式,于是当需要重复只用样式时就可以这样再指定一个,但缺点之一是baseon只能在一个样式中使用一次,添加一个新样式CustomBtn,代码如下:
< 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接口,因为在绑定资源时,他要进行迭代显示,因此我们显式实现此接口。完成此此类后,接下来就是在界面上添加对应的应用,然后进行
绑定呈现,经验证,效果符合预期。这样相关使用此列表的界面都能保证数据一致,而且不用在每个列表中单独的定义。
如果不使用资源绑定,在界面上单独书写,代码如下:
< ComboBoxItem Content ="请选择证件类型" />
< ComboBoxItem Content ="A.身份证" />
< ComboBoxItem Content ="B.军官证" />
< ComboBoxItem Content ="C.护照" />
< ComboBoxItem Content ="D.港澳台居民证件" />
< ComboBoxItem Content ="E.其他" />
</ ComboBox >
每个使用的界面,都要单独这样定义,如果使用列表后,则可以单独书写如下代码:
< Options:CardType x:Name ="SlCardType" ></ Options:CardType >
</ Grid.Resources >
<!-- 省略其它代码 -->
< ComboBox x:Name ="cmbCardType" Style =" {StaticResource CmbStyle} " ItemsSource =" {StaticResource SlCardType} " DisplayMemberPath ="Name" SelectedValuePath ="Value" />
以上代码就简单实现了资源的绑定,在多界面都需要使用此列表中,尤为有效,如果只单独一个界面使用,效果不太明显。
此上为个人的方法,大家有好的建议和意见可以交流一下。