首页 > 其他分享 >WPF 使用 StaticResource、DynamicResource、RelativeSource

WPF 使用 StaticResource、DynamicResource、RelativeSource

时间:2023-02-06 22:22:54浏览次数:41  
标签:依赖 StaticResource Theme DynamicResource 运行 WPF 资源 属性

StaticResource(静态资源)依赖属性

静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改。

StaticResources的适用场合:
(1)在资源第一次引用之后无需再修改资源的值。
(2)资源引用不会基于运行时的行为进行重新计算,比如在重新加载Page/Window的时候。
(3)当需要设置的属性不是DependencyObject或Freezable类型的时候,用StaticResource。
(4)当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享时,也使用StaticResource。
(5)当需要为一个自定义控件创建一个Theme,并Theme中使用资源,就需要使用StaticResource。因为StaticResource的资源查找行为时可预测的,并且本身包含在Theme中。而对于DynamicResource,即使资源是定义在Theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。
(6)当需要使用资源设置大量的依赖属性(Dependency Property)的时候。

由于依赖属性具有属性系统提供的值缓存机制,所以,如果能在程序装载时设置依赖属性的值,这样,依赖属性就不需要检查自己的值并返回最后的有效值了。

<TextBox Text="{StaticResource Content}" Width="100" x:Name="TextBox1"/>

DynamicResource(动态资源)依赖属性

动态资源则是在运行时决定,当运行过程中真正需要时,才到资源目标中查找其值。因此,我们可以动态地修改它。由于动态资源的运行时才能确定其值,因此效率比静态资源要低。

Dynamic Resource一般使用在如下场合:
(1)资源的值依赖一些条件,而该条件直到运行时才能确定。
包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和操作系统。
(2)为自定义控件引用或创建Theme Style。
(3)希望在程序运行期间调整资源字典的内容时。
(4)希望资源可以向前引用时(如上面在WrapPanel中引用content一样)
(5)资源文件很大,希望在运行时才加载。
(6)要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。
(7)当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。
Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的。

<TextBox Text="{DynamicResource Content}" Width="100" x:Name="TextBox2"/>(我们点击Button发现,后面的TextBox值可以发生变化,因为它用是的动态资源)

 

 RelativeSource(相对资源)绑定属性

将给定对象的属性绑定到对象本身的另一个属性时,当我们尝试将对象的属性绑定到其相对父对象的另一个属性时,RelativeSource 是一种标记扩展。

1. Mode Self:

 

2. Mode FindAncestor

 

 

 

AncestorLevel=2 更改为 AncestorLevel=1 ,从当前层向外层延申1或2层,当为2时结果是Parent1,当为1时结果时是Parent3

 

3. TemplatedParent

 

 

 

标签:依赖,StaticResource,Theme,DynamicResource,运行,WPF,资源,属性
From: https://www.cnblogs.com/ZBO123/p/17096888.html

相关文章

  • WPF-04 数据绑定
    下图展示WPF中数据绑定基本概念 在WPF中Binding对象是一根连接绑定目标和数据源的桥梁,任何一方变化都会通过Binding来通知。Code<Windowx:Class="Example_03.MainWindow"......
  • WPF-03 资源之Resources
    WPF中有两种类型资源StaticResource、DynamicResource,资源本质上就是一个对象。 这节我们主要介绍静态资源StaticResource(静态资源)在第一次编译后就确定的......
  • WPF-03 资源之Resources
    WPF中有两种类型资源StaticResource、DynamicResource,资源本质上就是一个对象。 这节我们主要介绍静态资源StaticResource(静态资源)在第一次编译后就确定的......
  • WPF-06 样式(Style)
    在我们前面介绍资源的时候,我们提到了样式表,如果你之前是做Web开发的,你会发现Style有点类似于Web中的CSS。控件级别样式我们可以在控件级别定义自己的样式,控件级......
  • WPF-06 样式(Style)
    在我们前面介绍资源的时候,我们提到了样式表,如果你之前是做Web开发的,你会发现Style有点类似于Web中的CSS。控件级别样式我们可以在控件级别定义自己的样式,控件级......
  • 超级好用的KeyBoard WPF软键盘
    超级好用的KeyBoardWPF软键盘​​项目背景​​​​系统结构​​​​核心概述​​​​1、用于墨迹识别核心类库​​​​2、中文字库​​​​效果展示​​​​1、拼音检索效......
  • WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能
    很多工程软件拥有自己定义的脚本语言,作为程序员用惯了具有高亮显示和智能提示功能的编辑器,所以针对特定的脚本自己开发一个编辑器。主要采用WPF、C#语言以及AvalonEdit控件......
  • 用Wpf做一个Diagram画板(续2)(包含封装一个控件FlowchartEditor)
    据上一次更新https://www.cnblogs.com/akwkevin/p/15047453.html已经1年有余,本次更新主要参照了一个Blazor的Diagram的画线算法,链接地址:https://github.com/Blazor-Diagra......
  • WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能
    WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能很多工程软件拥有自己定义的脚本语言,作为程序员用惯了具有高亮显示和智能提示功能的编辑器,所以针对特定的脚本自己开......
  • wpf中Interaction.Behaviors详解
    在WPF4.0中,引入了一个比较实用的库——Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除了内置了一系列比较好用的功能外,还提供了比较良好的扩展接口。......