这节讲一下如何在WPF中使用资源。
01
了解资源
在编程中,一个变量,一段代码,一张图片,一段视频或者音频,这种可以拿来为我所用的东西就可以称之为资源,一个让人眼前一亮的程序,可能会使用到许许多多的资源。在WPF中,除了常用的根据路径引用资源文件,还为我们提供了管理资源数据的“对象级”资源,以及Resources.resx文件,前者通过一个类型为ResouceDictionary的键值对对象来管理页面中定义的资源,后者则是一个资源表,可以供我们全局使用(当前并不是前者不能让我们全局使用,我们在App.xaml中定义的资源是可以被全局使用的)。
02
"对象级"资源
我们可以在XAML页面定义一些资源供我们使用,请先看如下代码:
在Window.Resources标签内的ResouceDictionary中可以定义资源,通过key属性指定资源的标识。此处我定义了key为btn_bgc字符串资源,该资源被Grid中的Button.Content属性使用,运行效果如下:
在Xaml中,我们可以使用标记扩展中的StaticResource和DynamicResource指令引用资源,该两者的区别是,使用StaticResource,会在程序启动时读取一次资源数据,后续如果资源数据变动,引用者是不会知道的;而DynamicResource则是会多次读取,动态更新。
除了在Xaml中使用资源,我们也可以在代码中通过Resoure对象获取,请看如下代码:
从后台代码中,我们可以使用FindResource方法或访问Resources对象通过索引器的方式获取,但两者还是有区别的,FindResource方法的查找面很广,在App.Xaml中定义的资源,也会被找到,而Resources对象则是只会找本页面定义的资源。
03
Resources.resx文件
在项目的Properties下展开可以找到这个文件:
双击打开后,是个列表,我们可以看到是个表格界面:
左上角可以指定资源是string还是其它:
默认情况下,该文件的访问级别(Access Modifier)是Internal,也就是在代码中可以访问,一般来说,应该改为Pubilc,这样在Xaml中也可以访问。
在代码中获取该资源如下:
在Xaml中获取该资源如下:
在.NET 5版本中,默认去掉了Properties这个文件夹,但如果需要的话我们依然可以通过手动为项目添加Resources.resx文件。