WPF之资源


WPF中的数据分为四个等级存储:数据库、资源文件、WPF对象、变量

每个WPF的界面元素都有一个名为Resources的属性,这个属性继承自FrameworkElement类,起类型为ResourceDictionary,ResourceDictionary能够以“key-value”对的形式存储资源,在保存资源时,ResourceDictionary认为资源对象的类型是object。

<Window x:Class="WpfApplication17.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">WPF对象资源</sys:String>
        </ResourceDictionary>
    </Window.Resources>
    <StackPanel>
        <Button Content="{StaticResource ResourceKey=str}" />
    </StackPanel>
</Window>

在检索资源时,先查找控件自己的Resources属性,如果没有找到,会沿着逻辑树向上查找,最后到达Application.Resources,如果还是找不到,就会报异常了

在C#代码中也可以使用定义在XAML代码里的资源

button1.Content = FindResource("str");

button1.Content = Resources["str"];

ResourceDictionary可以包含另一个xaml文件,这样就可以先把皮肤做好,需要使用的时候包含就可以了

加载资源词典中的资源,可以使用静态和动态两种方式使用这些资源:StaticResource和DynamicResource

        <Button Content="{StaticResource ResourceKey=str}" />
        <Button Content="{DynamicResource ResourceKey=str}" />

两种用法的区别是,动态资源只会加载一次,以后资源变化后,界面也不会变化,动态资源是实时更新的,当资源在运行时发生变化后,界面也会变化

也可以将资源打包到最终的exe或dll中,如果要添加的资源是文字而非文件,可以使用应用程序properties名称空间中的Resources.resx资源文件,为了让xaml文件能访问这个类,一定要把Resources.resx的访问级别改成Public,然后就可以在xmal中使用了,使用x:Static标签扩展来访问

首先导入Resources的命名空间

xmlns:prop="clr-namespace:WpfApplication17.Properties"

然后使用x:Static标签来访问资源

<Button Content="{x:Static prop:Resources.str}" />

也可以在C#代码中访问资源

button1.Content = Properties.Resources.str;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值