WPF之资源

  我们把有用的东西称为资源,程序中存放数据的地方有很多,可以放在数据库里,可以存储在变量里,界于数据库存储与变量存储之间,我们还可以把数据存储在程序主体之外的文件里。外部文件与程序主体分离,这就有可能丢失或损坏,为了避免丢失或损坏,编译器允许我们把外部文件编译进程序主体,称为程序主体不可分割的一部分,这就是传统意义上的程序资源,也成为二进制资源。

  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"];
原文地址:https://www.cnblogs.com/yijiaoyingbi/p/4894777.html