WPF中的PropertyMetaData,UIPropertyMetadata和FrameworkMetaData之间有什么区别

Wpf*_*Bee 11 wpf

我知道这些类之间的基本区别是我们在备份属性时使用PropertyMetadata,当我们想要支持动画时使用UIPropertyMetadata,以及在用户控件中使用FrameworkMetadata for Framework属性.

但我只理解理论部分.如果你能解释一个最简单的例子,它将在3个不同的依赖属性中使用所有这3个类,清楚地区分它们,这将是一个很好的例子.

提前致谢.

小智 13

来源:PropertyMetadata与FrameworkPropertyMetadata

当你实现一个自定义依赖项属性,并通过调用注册的属性DependencyProperty.Register,您可以通过它传递的一个实例指定属性的一些元数据PropertyMetadata.这可以是PropertyMetadata类的实例,也可以是其子类之一的实例.差异如下所示.

PropertyMetadata - 与依赖属性相关的基本元数据

  • CoerceValueCallback - 设置时强制值
  • DefaultValue - 属性的默认值
  • PropertyChangedCallback - 回应房产的新有效价值

UIPropertyMetadata- 源自PropertyMetadata并添加:

  • IsAnimationProhibited - 禁用此属性的动画?

FrameworkPropertyMetadata- 源自UIPropertyMetadata并添加:

  • AffectsArrange,AffectsMeasure,AffectsParentArrange,AffectsParentMeasure,AffectsRender-应该布局计算将属性值更改后重新运行?
  • BindsTwoWayByDefault,DefaultUpdateSourceTrigger,IsDataBindingAllowed,IsNotDataBindable-决定房地产数据如何参与绑定
  • Inherits,OverridesInheritanceBehavior- 继承是否适用于此属性?
  • Journal - 在日记时存储此值?
  • SubPropertiesDoNotAffectRender - 布局更改时检查此对象的属性?


Cle*_*ens 5

PropertyMetadata和FrameworkPropertyMetadata之间的一个重要实际区别是后者允许指定一组FrameworkPropertyMetadataOptions.

例如,指定FrameworkPropertyMetadataOptions.AffectsRender启动重新呈现属性已更改的UIElement的注意事项.如果没有此标志,则必须在PropertyChangedCallback中手动执行此操作.