您的位置:首页 > 其它

WPF学习 第十章 资源

2014-11-10 10:48 363 查看

WPF资源

WPF资源系统是一种保管有用对象的方法,可以实现这些对象的重用。通常在XAML标记中定义资源,也可以在代码中定义资源。

特点:高效性,一处定义多处使用;可维护性:集中定义资源便于维护修改;适应性,可以动态修改。

每个元素都要一个Resources属性存储资源字典集合。元素可以访问所有父元素的资源,所以通常资源定义在窗体层。代码中x:Key指定了资源索引名。

<Window.Resources>
<ImageBrush x:Key="ib1" ImageSource="C:\\Image1.bmp"></ImageBrush>
</Grid.Resources>
<Grid>
<Button Name="button1" Content="button" Background="{DynamicResource ib1}">
</Button>
<Button Name="button2" Content="button" Background="{StaticResource ib1}">
</Button>
</Grid>

有两个标记扩展可用使用:动态资源DynamicResource和静态资源StaticResource

以静态资源引用的资源必须在使用资源之前定义。可以在不同集合中定义相同名称的资源(类似C++里的局部变量)。

静态资源在程序运行时指定,资源的改变不会引起引用对象的改变。
<Window.Resources>
<ImageBrush x:Key="ib1" ImageSource="C:\\Image1.bmp" TileMode="Tile" Viewport="0,0,16,16" ViewportUnits="Absolute"></ImageBrush>
</Window.Resources>
<StackPanel>
<Button Name="button1" Content="Dynamic" Background="{DynamicResource ib1}"></Button>
<Button Name="button2" Content="Static" Background="{StaticResource ib1}"></Button>
<Button Click="Button_Click_1">button</Button>
</StackPanel>

上例子中点击button,采用静态引用资源方式的button2颜色不变,动态引用的button1颜色改变。



但不改变资源引用,而修改其他属性,对静态和动态都是有效的:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
ImageBrush brush = (ImageBrush)this.Resources["ib1"];
brush.Viewport = new Rect(0, 0, 32, 32);
}

上面代码中我们修改了Viewport属性,效果如下。可见静态资源也更新了。





通过C#代码访问资源,用到函数FindResource或TryFindResource

Button button = (Button)sender;

           ImageBrush brush = (ImageBrush)button.TryFindResource("ib1");

访问资源的过程通常会逐层往上搜索,元素资源、窗口资源、应用程序、系统资源。

应用程序资源为不同窗口资源共享提供很好的方法,资源在App.xaml里定义。

系统资源提供了三类:SystemColors、SystemFonts、SystemParameters。例子:
button1.Foreground = SystemColors.ActiveCaptionTextBrush;
<Button  Name="button1" Content="Dynamic" Background="{DynamicResource ib1}" Foreground="{Binding SystemColors.WindowsTextBrush}"></Button>


</pre><h1>资源字典</h1></p><p>资源字典是一个简单的XAML文档,只用来存储资源。</p><p>文件名Dictionary1.xaml</p><p></p><p><pre name="code" class="html"><ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ImageBrush x:Key="ib1"ImageSource="C:\\Image1.bmp" TileMode="Tile"
Viewport="0,0,16,16"ViewportUnits="Absolute"></ImageBrush>
</ResourceDictionary>
文件MainWindow.xaml
<Window.Resources>
<ResourceDictionary Source="Dictionary1.xaml">
</ResourceDictionary>
</Window.Resources>


引用多个资源字典文件,需要用到合并资源字典:

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionarySource="Dictionary1.xaml"></ResourceDictionary>
<ResourceDictionarySource="Dictionary2.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: