WPF—资源与资源字典
开发工具与关键技术:VS2015, XAML,C#
作者:张金鱼
撰写时间:2019 年 3月 28 日
WPF资源分为静态资源和动态资源。静态资源是在程序载入前就对资源进行引用,类似样式资源,而动态资源是程序在运行工程中才去访问的资源,故事版资源;资源字典是个定级元素,在它里面直接封装资源供整个项目使用,在这里我就对资源和资源字典做个简单的介绍。
1、 资源;
资源定义在根元素下,和HTML中的CSS类似,格式一般是
<根元素. Resources>
<资源定义 x:key=”资源标记名” />
</根元素. Resources>
//子元素调用
<子元素 (对应)属性名=”{StaticResource 资源标记名}” />
这样资源的样式就引用过来了,例子如下:
<Grid>
//定义资源
<Grid.Resources>
//线性渐变画刷定义背景色
<LinearGradientBrush x:Key="bggrid" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Yellow" Offset="0"></GradientStop>
<GradientStop Color="Green" Offset="0.25"></GradientStop>
<GradientStop Color="Blue" Offset="0.5"></GradientStop>
<GradientStop Color="Purple" Offset="1"></GradientStop>
</LinearGradientBrush>
</Grid.Resources>
//按钮调用资源
<Button Background="{StaticResource bggrid}" Width="100" Height="50" Content="资源" Foreground="White"></Button>
</Grid>
效果如下:
这是一个网格布局下的按钮,背景颜色引用了静态资源字典bggrid里面定义好的样式。因为我定义的线性渐变背景色,所以按钮背景色就是渐变色背景。
2、 资源字典;
资源字典是我们自己新建的一个xaml文件,在项目里添加新建项,然后选中资源字典,新建资源字典,如图:
资源字典的写法和资源一样,直接在文件里定义你的资源就可以了
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:资源字典">
<!-----定义textbox的样式,不写key,整个项目可以使用--->
<Style TargetType="TextBox">
<Setter Property="FontFamily" Value="楷体"></Setter>
<Setter Property="FontSize" Value="50"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
</Style>
</ResourceDictionary>
新建好资源字典后还要去启动项(App.xaml)合并资源字典,这样才可以供整个项目使用
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!----sourceDictionary里面的Source链接需要合并的资源字典名称,
//每个 sourceDictionary标签只能连接一个资源字典,
//可以定义多个sourceDictionary 来连接多个资源字典-
<ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
窗体xaml代码如下图所示,这里没有写代码块,因为代码不多,所以图片展示xaml代码和效果图片
在图中我并没有在当前窗体中定义textbox的前景色,而它却根据元素种类引用到了应用程序资源字典的样式了;
资源和资源字典不仅仅能定义元素的样式,还能定义资源的模板、故事版、触发器等等,方便了为较多同样控件定义样式时代码的冗余、重复定义同一样式,比如我们一个项目的文本框的样式需要同一而定,就直接可以在资源或者资源字典里定义它们的样式,或者定义一些控件的故事版等。