我们把有用的东西称为资源,程序中存放数据的地方有很多,可以放在数据库里,可以存储在变量里,界于数据库存储与变量存储之间,我们还可以把数据存储在程序主体之外的文件里。外部文件与程序主体分离,这就有可能丢失或损坏,为了避免丢失或损坏,编译器允许我们把外部文件编译进程序主体,称为程序主体不可分割的一部分,这就是传统意义上的程序资源,也成为二进制资源。
WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源。每个界面元素都可以携带自己的资源并可被自己的子级元素共享。
对象资源
每个WPF的界面元素都具有一个名为Resource的属性。这个属性继承自FrameworkElement类,其类型为ResourceDictionayr。ResourceDictionary能够以“键-值”对的形式存储资源,当需要用到某个资源时,使用“键-值”对可以索引到资源对象。
假如现在我们需要一个字符串资源,在TextBlock里显示,就可以如下方式实现:
<Window x:Class="WpfApplication9.MainWindow" 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" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <ResourceDictionary> <sys:String x:Key="str">Hello World</sys:String> </ResourceDictionary> </Window.Resources> <StackPanel> <TextBlock Text="{StaticResource str}" Margin="10"></TextBlock> </StackPanel> </Window>
通过StaticResource使用资源,意味着程序载入内存时只使用一次,之后就不再访问这个资源了,如果这个资源发生了变化,程序也不会有任何变化;如果希望在资源发生变化时,程序也做出相应的改变,就需要通过DynamicResource使用资源。
在检索资源时,先查找控件自己的Resource属性,如果没有这个资源程序会沿着逻辑树向上一级控件查找,如果连最顶级的容器都没有这个资源,程序会去查找Application.Resources,如果还么有找到,那就会抛出异常。
在C#中使用资源,代码如下:
string text = (string)this.FindResource("str");
或者
string text = (string)this.Resources["str"];
时间: 2024-11-03 15:39:39