WPF快速入门系列(6)——WPF资源和样式

最后更新于:2022-04-02 00:12:59

# WPF快速入门系列(6)——WPF资源和样式 ## 一、引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用。而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果多个控件都应用了多个格式的时候,我们就可以把这些格式封装成格式,然后在资源中定义这个格式,之前如果用到这个格式就可以直接使用这个样式,从而达到重用格式的手段。从中可以发现,WPF资源和WPF样式是相关的,我们经常把样式定义在资源中。 ## 二、WPF资源详解 ## 2.1 资源基础介绍 尽管可以在代码中创建和操作资源,但是通常都是以XAML标签的形式定义资源的。下面具体看看如何去定义一个资源,具体的XAML代码如下所示: ``` ** LearningHard博客:http://www.cnblogs.com/zhili/ ** ``` 每一个元素都有一个Resources属性,该属性存储了一个资源字典集合。关于资源字典将会在下面部分介绍。尽管每个元素都提供了Resources属性,但通常在窗口级别上定义资源,就如上面XAML代码所示的那样。因为每个元素都可以访问它自己的资源集合中的资源,也可以访问所有父元素的资源集合中的资源。 ## 2.2 静态资源和动态资源区别 为了使用XAML标记中的资源,需要一种引用资源的方法,可以通过两个标记来进行引用资源:一个用于静态资源,另一个用于动态资源。在上面的XAML中,我们引用的方式就是静态资源的引用方式,因为我们指定了**StaticResource。**那静态资源和动态资源有什么区别呢? 对于静态资源在第一次创建窗口时,一次性地设置完毕;而对于动态资源,如果发生了改变,则会重新应用资源。下面通过一个示例来演示下他们之间的区别。具体的XAML代码如下所示: ``` Normal Content. ``` 具体的运行效果如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-23_56a2eb43354fb.png) 当样式中没有定义key标记时,则对应的样式会指定应用到目标对象上,上面XAML代码就是这种情况,如果显式为样式定义了key标记的话,则必须显式指定样式Key的方式,对应的样式才会被应用到目标对象上,下面具体看看这种情况。此时XAML代码如下所示: ``` Normal Content. ``` 此时运行效果如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-23_56a2eb4346cbc.png) ## 3.2 样式触发器 WPF样式还支持触发器,在样式中定义的触发器,只有在该属性或事件发生时才会被触发,下面具体看看简单的样式触发器是如何定义和使用的,具体的XAML代码如下所示: ``` Normal Content. ``` 此时的运行效果如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-23_56a2eb435695c.png) 上面定义的触发器都是在某个属性发生变化时触发的,也可以定义当某个事件激活时的触发器,我们也把这样的触发器称为事件触发器,下面示例定义的事件触发器是等待[MouseEnter](http://msdn.microsoft.com/zh-cn/library/system.windows.uielement.mouseenter(v=vs.110).aspx)事件,一旦触发MouseEnter事件,则动态改变按钮的FontSize属性来形成动画效果,具体的XAML代码如下所示: ``` Normal Content. ``` 此时的运行效果如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-23_56a2eb4375fd3.gif) ## 四、小结 到这里,WPF资源和样式的内容就介绍结束。总结为,WPF样式类似CSS,可以将多个属性定义在一个样式中,而样式又存放在资源中,资源成了样式和对象的容器。另外WPF样式还支持触发器功能,本文中演示了属性触发器和事件触发器的使用。在接下来一篇博文中将介绍WPF模板。 本文所有源码:[ResourceAndStyle.zip](http://files.cnblogs.com/zhili/ResourceAndStyle.zip)
';