深入浅出WPF——资源

WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源,每个界面元素都可以携带自己的资源并可被自己的子级元素共享。

1:WPF对象级资源的定义和查找

每个WPF的界面元素都具有一个名为Resources的属性,这个属性继承自FrameworkElement类,其类型为ResourcesDictionary。ResourcesDictionary能够以键值对的形式存储资源,当需要使用某个资源时,使用键值对可以索引到资源对象。在保存资源时,ResourcesDictionary视资源为Object类型,所以在使用资源时先要对资源对象进行类型转换,XAML编译器能够根据标签的Attribute自动识别资源类型,如果类型不对就会抛出异常,但在C#代码里检索到资源对象后,类型转换的事情就只能由我们自己来做了。

在检索资源时,先查找控件自己的Resources属性,如果没有这个资源程序会沿着逻辑树向上一级控件查找,如果连最顶层容器都没有这个资源,程序就会去查找Application.Resources,如果还没找到,那就会抛异常。

2:静态资源和动态资源

当资源被存储进资源字典后,我们通过使用两种方式来使用这些资源——静态方式和动态方式。静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不会再去访问这个资源了;动态资源使用(DynamicResources)指的是在程序运行过程中仍然会会去访问资源。如果你确定某些资源只在程序初始化的时候使用一次、以后不会在改变,就应该使用StaticResource,而程序过程中还有可能改变的资源应该以DynamicResource形式使用。

3:向程序添加二进制资源

如果要添加的资源是字符串而非文件,可以使用应用程序Properties命名空间中的Resources.resx资源文件。打开资源文件的方式是在项目管理器中展开Properties节点并双击Resources.resx。

Resources.resx文件内容的组织形式也是键值对,编译后Resources.resx会形成Properties名称空间中的Resources类,使用这个类的方法或属性就能获取资源。为了让XAML编译器能够访问这个类,一定要把Resources.resx的访问级别有Internal改为Public。利用资源文件编辑器,可在资源文件的字符串组里添加两个条目,然后分别在XAML和C#代码中访问它们。

如果需要添加的资源不是字符串而是图标、图片、音频或视频,方法就不是使用Resources.resx了,WPF不支持这么做。在WPF中使用外部文件作为资源,仅需简单地将其加入项目即可。

4:使用Pack URI路径访问二进制资源

WPF对二进制资源的访问有自己的一套方法,称为Pack URI路径。

在使用Pack URI路径时有几点需要注意的:

(1)Pack URI使用从右向左的正斜线(/)表示路径。

(2)使用缩略写法意味着是相对路径,C#代码中的UriKind必须为Relative而且代表根目录的/可以省略。

(3)使用完整写法时是绝对路径,C#代码中的UriKind必须为Absolute并且代表根目录的/不能省略。

(4)使用相对路径时可以借助类似DOS的语法进行导航。

 

参考教材书:深入浅出WPF 刘铁猛  著

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值