Attached Property是Dependency Property的一种特殊形式,它是用DependencyProperty.RegisterAttached方法注册的,可以被有效地添加到任何继承自DependencyObject的对象中,所以被称为Attached Property。一开始,这可能听起来很奇怪,但这种机制在WPF中有很多种应用。

首先,我们先看看Attached Property的定义,以TextElement的FontSizeProperty为例:

public static readonly DependencyProperty FontSizeProperty;

FontSizeProperty = DependencyProperty.RegisterAttached(

"FontSize", typeof(double), typeof(TextElement), new FrameworkPropertyMetadata(

SystemFonts.MessageFontSize, FrameworkPropertyMetadataOptions.Inherits |

FrameworkPropertyMetadataOptions.AffectsRender |

FrameworkPropertyMetadataOptions.AffectsMeasure),

new ValidateValueCallback(IsValidFontSize));

Attached Property的注册和Dependency Property很相似,区别在于是用RegisterAttached还是用Register方法注册。

对Attached Property的访问,通过Static函数来实现。

public static double GetFontSize(DependencyObject element)

{

element.GetValue(FontSizeProperty);

}

public static void SetFontSize(DependencyObject element, double value)

{

element.SetValue(FontSizeProperty, value);

}

一般来说,Attached Property不会使用.NET属性包装器进行包装。而且,实现Attached Property的类,并未调用自己的SetValue/GetValue方法,因此,实现Attached Property的类不需要继承自DependencyObject。

下面的示例显示在XAML中设置Attached Property:

<StackPanel TextElement.FontSize="30">

<Button Content="I'm a Button!"/>

</StackPanel>

StackPanel自己没有任何与字体有关的属性,如果要在StackPanel上设置字体大小,那么需要使用TextElement的FontSize Attached Property。当XAML解析器或编译器遇到TextElement.FontSize这样的语法时,它会去调用TextElement(Attached Property提供者)的SetFontSize函数,这样它们才能设置相应的属性值。另外,与普通的Dependency Property一样,这些GetXXX和SetXXX方法只能调用SetValue/GetValue方法,不能挪作他用。

接下来,我们说说Attached Property的用途。

Attached Property属性的一个用途是允许不同的子元素为实际在父元素中定义的属性指定唯一值。此方案的一个具体应用是让子元素通知父元素它们将如何在用户界面 (UI) 中呈现。派生自Panel的各种类定义了一些Attached Property,用来把它们添加到子元素上来控制它们的摆放。通过这种方式,每个Panel可以把自定义行为给任何一个子元素,而不需要所有的子元素都具有自己的相关属性集。

Attached Property属性的另一个用途是可以作为一种扩展机制。即可以用Attached Property高效地向密封类的实例添加自定义数据。另外,Attached Property是Dependency Property,因此,可以把任何一个Dependency Property作为一个Attached Property。如果对实例进行了扩展,则SetValue设定的值是储存在实例中的,可以通过GetValue获得。

WPF中的Attached Property相关推荐

  1. UWP开发入门(十一)——Attached Property的简单应用

    UWP中的Attached Property即附加属性,在实际开发中是很常见的,比如Grid.Row: <Grid Background="{ThemeResource Applica ...

  2. 【翻译】WPF 中附加行为的介绍 Introduction to Attached Behaviors in WPF

    [翻译]WPF 中附加行为的介绍 Introduction to Attached Behaviors in WPF 目录  隐藏 引言 [Introduction] 背景 [Background] ...

  3. 通过Attached Property给控件绑定Command(二)

    上一篇我们提到希望建立一个通用的Command绑定,本篇就这个问题来和各位进行讨论.也希望各位能指出不足,提出改进的建议. 我希望最终实现的效果如下图所示,可以给任何一个Control绑定Comman ...

  4. WPF中的图表设计器 – 2

    [原文地址] http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part2.aspx [原文作者] sukram [译者]WizRay Down ...

  5. WPF中改进自定义Command一些想法

    Command来源于Command命令模式,Command模式它封装的是命令,把命令发出者的责任和命令执行者的责任分开,直白的说为了调用与具体实现解耦.关于理论俺向来是不擅长的,而且各位达人的文章也已 ...

  6. WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种

    WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...

  7. WPF中制作带中国农历的万年历

    WPF中制作带中国农历的万年历 原文:WPF中制作带中国农历的万年历 本例应用.net 2.0中的ChineseLunisolarCalendar类,制作出带中国农历的万年历.  先看看效果图片(已缩 ...

  8. WPF中的依赖项属性

    随着WPF的推广,不得不重新拾起WPF来,因为这块的产品越来越多. 只能跟着MSDN来学了,所以想是在这里记录下学习的过程和对知识的理解. 先从最基本的吧,依赖项属性是WPF中不同的地方,先了解一下它 ...

  9. WPF中Expander与ListBox(ItemsControl)嵌套中的问题

    原文:WPF中Expander与ListBox(ItemsControl)嵌套中的问题 1. 当ListBox放在Expander中时,为了要实现实时更新数据的效果,这里使用了 ObservableC ...

最新文章

  1. Kubernetes — Project Layout 与 cmd 入口设计
  2. 权限提升 T1548.002 绕过UAC
  3. 取出list中属性_你是否用过List<T>和List<?>?
  4. Java多线程闲聊(一):概论
  5. 关于浏览器对静态HTML页面的缓存问题
  6. 自己写一个H5项目CI系统
  7. [css] z-index有时不起作用的原因是什么?怎么解决?
  8. hrsc2016 下载 数据集_PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight...
  9. image.resize()==>返回此图像的大小调整后的副本
  10. linux live cd 定制,如何创建定制的Ubuntu Live CD或者USB的简易方式
  11. RadASM的主题更换!
  12. 阿里一位 70 后程序员、架构师的 26 个职场感悟
  13. linux卷组大小查看,Linux逻辑卷,卷组管理
  14. 买手机时几GB+几GB啥意思
  15. Mac使用Karabiner-Elements修改mac默认快捷键
  16. paillier同态加密算法原理及代码实现
  17. 利用Word邮件合并插入图片
  18. %在C语言计算中的用法
  19. IFrame语法小全
  20. 超炫计算机课件ppt,5分钟打造高级炫酷的PPT系列第一季-斧子演示视频教程

热门文章

  1. 【直播回放】新手如何入门并学习自然语言处理
  2. 全球及中国拉丝润滑剂粉末行业投资潜力及发展战略规划报告2021-2027年
  3. js 为什么0.1+0.2不等于0.3
  4. 怎样理解js数组中indexOf()的用法与lastIndexOf
  5. class类文件结构
  6. Java学习之路(一):日常第一课,认识JAVA
  7. 洛谷 P2197 nim游戏
  8. nyoj A+B Problem IV
  9. 《廖雪峰 . Git 教程》学习总结
  10. CentOS7 续续