WPF教程(七)其它资源(转)
WPF教程(七)其它资源
资源字典出现的初衷就在于可以实现多个项目之间的共享资源,资源字典只是一个简单的XAML文档,该文档除了存储希望使用的资源之外,不做任何其它的事情。
创建资源字典的过程比较简单,只是将需要使用的资源全都包含在一个xaml文件之中即可。在项目右击选择添加新建项,选中资源词典(WPF)就完成一个.xaml后缀的资源字典文件,我们看下面一个简单的引用例子。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="string">helloworld</sys:String>
<sys:Double x:Key="double">3.141592654</sys:Double>
<ImageBrush x:Key="imagebrush" >Gray</ImageBrush>
</ResourceDictionary>
<Window x:Class="OtherResources.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="Dictionary1.xaml"/>
</Window.Resources>
<Grid>
<WrapPanel>
<TextBlock Name="textblock" Text="{StaticResource string}" Background="{StaticResource imagebrush}" Margin="10,10,0,0"/>
</WrapPanel>
</Grid>
</Window>
在Window.Resources下我们可以创建多个资源,包括style样式或者一些属性设置,但不能有多个资源字典,可以合并多个外部资源字典成为本地字典。再前已经创建一个Dictionary1.xaml资源文件,现在我们再创建一个Dictionary2.xaml,如下:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="TextBlock" x:Key="textblock">
<Setter Property="FontSize" Value="12"/>
<Setter Property="FontFamily" Value="微软雅黑"/>
<Setter Property="Text" Value="helloworld"/>
</Style>
</ResourceDictionary>
如何将两个外部资源词典合为一个本地资源,我们可以利用ResourceDictionary的MergedDictionaries属性。
<Window x:Class="OtherResources.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
<ResourceDictionary Source="Dictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<WrapPanel>
<TextBlock Name="textblock" Text="{StaticResource string}" Background="{StaticResource imagebrush}" Margin="10,10,0,0"/>
<TextBlock Style="{StaticResource textblock}"/>
</WrapPanel>
</Grid>
</Window>
特别提示:(1)合并字典(MergedDictionaries 集合中的字典)中对同一对象的同一子元素进行定义的时候,会产生覆盖效果:在这种情况下,所返回的资源将来自在 MergedDictionaries 集合中最后一个找到的字典。(2)合并字典(MergedDictionaries 集合中的字典)中对同一对象的不同子元素定义的时候会产生叠加效果。
总结
WPF资源暂且先介绍到这里,后续有新的发现会在这章继续更新。