WPF对象级资源


一、WPF支持程序级资源(也称为二进制资源),和对象级资源。

 

 二、对象级资源简介

  • 简介:对象级资源主要是被应用到各个界面元素中,而每个WPF界面元素都具有一个Resource属性,这个属性继承自FrameworkElement类,其类型为ResourceDictionary(ResourceDictionary是以"键-值"的形式存储资源,通过索引找到资源并应用)。
  • 对象级资源的应用场景主要分为三个:

  ① Application的对象级资源:每新建一个WPF应用,就会自动生成一个App.xaml,这个文件最常用的特性是定义全局资源,这些资源会在整个应用里面被使用。 

1 <Application>
2     <Application.Resources>
3         <TextBlock x:Key="Res1" Text="Hello"/>
4     </Application.Resources>
5 </Application>

  ② 界面元素的对象级资源:可放在任一控件的Resource属性中,但通常将其放在界面的根元素上,起生效范围是当前界面。

1 <Window>
2    < Window.Resources>
3       <TextBlock x:Key="Res1" Text="Hello"/>
4    </ Window.Resources>
5 </Window>

  ③ 将对象级资源封装成外部资源字典:将对象级资源统一放在资源字典中,在需要使用的地方将其集成,一般都在App.xaml中对资源进行集成。

1 <UserControl>
2    <UserControl.Resources>
3       <ResourceDictionary Source="Res/ControlForDemo.xaml"/>
4    </UserControl.Resources>
5 </UserControl>

而资源字典的内容如下

1 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"                    
             xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" 2 xmlns:local="clr-namespace:DependencyPropertyDemo.Res"> 3   <TextBlock x:Key="Res1" Text="Fighting" x:Shared ="False"/> 4 </ResourceDictionary>

  —— page:可以保证XAML资源文件最终被编译为baml文件,然后可以作为资源插入到.NET框架中,在运行时,框架引擎提取并解析.baml,然后创建一个相应的WPF视觉树或工作流。

  —— Resource:可以嵌入到程序集中,但是不被编译,其解析速度会稍微慢一点。

三、资源字典的集成有两种方式

  • XAML集成外部资源字典
 1 <UserControl>
 2    <UserControl.Resources>
 3       <ResourceDictionary>
 4          <ResourceDictionary.MergedDictionaries>
 5             <ResourceDictionary Source="Res/ButtonStyle.xaml"/>
 6             <ResourceDictionary Source="Res/TextBoxStyle.xaml"/>
 7          </ResourceDictionary.MergedDictionaries>
 8       </ ResourceDictionary>
 9    </UserControl.Resources>
10 </UserControl>

  ResourceDictionary.MergedDictionaries:该属性是一个ResourceDictionary对象的集合,可以使用这个集合提供多个资源文件。注意:MergedDictionaries下面的每一个ResourceDictionary都必须是独立的,多个ResourceDictionary之间不可以相互引用;ResourceDictionary中定义的key是先进后出的,所以获取到的顺序和定义的顺序是相反的。

  • C#后台代码集成外部资源字典
this.Resources.MergedDictionaries.Add(new ResourceDictionary() 
{ 
    Source = new System.Uri("pack://application:,,,/AddResourceFile;component/Res/TextBoxStyle.xaml") 
});

四、对象级资源的使用

  • 在XAML中使用资源
1 <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
2         <Label Content="{StaticResource Res1}" HorizontalAlignment="Center"/>
3         <Label Content="{DynamicResource Res2}" HorizontalAlignment="Center"/>
4 </StackPanel>

  ① StaticResource:仅在程序载入内存时访问该资源一次;

  ② DynamicResource:程序在运行过程中每次使用都会重新访问该资源;

  • 在C#后台代码中使用资源
1 private void Button_Click(object sender, RoutedEventArgs e)
2 {
3     this.label1.Content = this.Resources["Res1"];
4     this.label2.Content = this.FindResource("Res2");
5 }

① FindResource:如果找不到请求的资源,会引发异常;

  ② Resources:获取本地的资源,找不到没有异常;

五、对象级资源的检索方式

  •   首先是查找控件自己的Resource属性,若查不到,会沿着逻辑树一级级的查找父控件的Resource属性;
  •   若在父级控件中都查不到,就会去查找Application的Resource属性;
  •   若仍然查找不到,则会异常处理。

 

 

文章来源:https://www.cnblogs.com/LXLR/p/15658656.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:WPF 引用第三方库的控件在设计器加上设计时数据和属性
下一篇:使用WtmPlus低代码平台提高生产力
评论列表

发表评论

评论内容
昵称:
关联文章

WPF对象资源
WPF程序资源
WPF_15_格式化绑定的数据
DbDataReader转对象
WPF 使用 Silk.NET 进行 DirectX 渲染入门
业务模块中添加并引用静态资源
[WPF] 用 Effect 实现线条光影效果
C#类型转换,对象转换
Python对象转json字符串
对象和Datatable互转
使用 WPF 做个 PowerPoint 系列 基于 OpenXML 解析实现 PPT 文本描边效果
[WPF] 实现 WPF 的 Inner Shadow
Python Flask返回JSON字符串,自定义对象转JSON字符串
TS有两个对象,便利B对象的属性,如果A对象有这个属性,就把B的值更新到A对象
winform绑定对象数据源
百亿数据 分库分表 后怎么分页查询?
Redis OM .NET Redis对象映射框架
dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架
百亿数据 分库分表 后怎么分页查询?
EFCore DbContext扩展执行原生SQL查询对象集合

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码