资源的使用
每个继承自FrameworkElement的类都有一个Resources的字段属性,用来存放自己的资源对象,Resources的类型为SourceDictionary,可以指定Source属性为一个文件路径而引用整个文件的资源。
<Window.Resources> <sys:String x:Key="title">资源示例</sys:String> </Window.Resources> //引用外部资源文件 <Window.Resources> <ResourceDictionary Source="skin.xaml"></ResourceDictionary> </Window.Resources> //通过代码查找 Object obj1 = Resources["key1"]; Object obj2 = FindResource("key2");
当在XAML中通过标记扩展引用资源时会自动向对象上层寻找,直到找到Application.Resources,还未找到时抛出异常。通过代码调用方法FindResource的效果与在XAML中通过标记扩展应用相同,即会自动向上层对象查找,未找到时抛出异常。通过具体对象的引用Resources["key"]只会查找该字典中的资源,并且未找到时不会抛出异常。
DynamicResource与StaticResource
静态资源指的是在程序载入后一次性使用资源,动态资源指的是在程序运行过程中仍会去访问资源,如果资源已改变则引用资源的对象会得到新资源值。如果确定资源不会改变应使用StaticResource引用资源,如果资源可能会改变应使用DynamicResource应用资源。
二进制资源
可以在项目的Properties文件夹中修改Resources.resx文件来使用字符串形式的二进制资源,在XAML中通过Static标记扩展引用字符串格式的二进制资源,需要把自动生成的Resources类改成public并把所在命名空间引入到XAML中。引用其他文件资源时直接把文件加入到项目中并设置文件属性的Build Action为Resource,Copy to Output Directory为Do Not Copy。直接通过相对路径就可以引用项目中的二进制资源。示例代码:
<Image x:Name="img" Source="Resources/Image1.png" Width="50" Height="50"></Image> //或 img.Source = new BitmapImage(new Uri("Resources/Image1.png", UriKind.Relative));
时间: 2024-10-08 15:10:33