WPF中使用资源字典
xaml
语言本质上就是在声明一个个类型的实例/对象, 在这个过程中会初始化实例部分的属性, 这些属性值可能也是一个复杂的类型需要用xaml
声明一个很复杂的实例(可能会是一个庞大的xaml
标签组成), 资源字典的本质就是事先声明封装好一系列实例对象(可能会是一个庞大的xaml
标签组成), 供其他xaml
调用(直接引用给属性赋值不需要再次声明), 从这个方面来说, 资源字典有点类似于全局变量(作用域由资源字典的位置决定).- 全局变量的好处是统一配置维护, 在
xaml
中还有另一个好处: 因为控件的某些属性是一个复杂的类型, 也需要用很多的xaml
代码声明属性值, 这些用复杂庞大的xaml
声明的属性值在很多控件中都需要频繁使用, 如果每次使用都声明一次就会很麻烦, 为了方便重用, 将这些属性的值先声明到资源字典中, 然后直接引用赋值给需要的控件属性 - 资源字典中声明好的实例对象可以给所有的控件合适的属性赋值(属性和属性值的类型要相同), 例如
Button
有一个Template
属性, 它属于ControlTemplate
类型, 那么你就应该在资源字典中找一个ControlTemplate
类型的实例赋值给当前这个Button
的Template
属性
资源字典的基本用法
从整体上看, 使用模式跟使用一个字典变量的方式差不多, 先声明好资源字典, 在需要用的地方通过字典的键引用对应的值
在当前项目中使用资源字典
基本上所有的xaml
元素都有资源Resources
属性, 资源里面可以放一些东西, 比如资源字典就是其中一种, 拥有资源字典的元素本身和子元素都可以使用资源字典里面的项, 所以为了所有元素都可以使用, 可以在App.xaml
中定义Application
的资源Resources
属性, 将资源字典放到里面去, 或者使用已经写好在单独文件中的资源字典, 在App.xaml
中合并资源字典(如下:)
<!--当前项目中创建资源字典文件: BasicDictionary.xaml-->
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ImageBrush x:Key="TileBrush1" ImageSource="4.jpg" ViewportUnits="Absolute" TileMode="Tile" Viewport="0 0 70 70" Opacity="0.5"/>
<ImageBrush x:Key="TileBrush2" ImageSource="3.jpg" ViewportUnits="Absolute" TileMode="Tile" Viewport="0 0 70 70" Opacity="0.5"/>
</ResourceDictionary>
<!--App.xaml 合并资源, 声明字典来源-->
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=