我什么时候应该使用 FrameworkPropertyMetadata 或 UIPropertyMetadata 而不是普通的 PropertyMetadata?

问题描述 投票:0回答:2

在查看示例附加属性和行为时,我看到了

FrameworkPropertyMetadata
UIPropertyMetadata
PropertyMetadata
的混杂使用。既然它们都形成了继承层次结构,那么我该如何选择使用哪一个呢?

wpf attached-properties attachedbehaviors
2个回答
90
投票

这些类用于报告依赖属性的一些行为方面。

检查不同类别提供的选项。

例如,

如果您只想通过 dp 支持属性并提供默认值,请使用

PropertyMetadata
,

如果要指定动画行为,请使用

UIPropertyMetadata
,

但是如果某些属性影响 wpf 框架级别的内容,例如元素布局、父布局或数据绑定,请使用

FrameworkPropertyMetadata

详细信息可以查看msdn http://msdn.microsoft.com/en-us/library/ms751554.aspx


0
投票

FrameworkPropertyMetadata
的一个有用功能是您可以定义行为
BindsTwoWayByDefault
。否则,依赖属性默认为 OneWay

当您需要为依赖属性提供双向绑定时,通常您总是需要为每个绑定定义

Mode=TwoWay
。如果将此模式设置为默认,则无需再为每个绑定设置它。

您可以这样设置行为:

new FrameworkPropertyMetadata(_myDefaultValue_, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)

完整示例:

public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(
    "IsSelected", typeof(bool), typeof(MyClass),
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault);

public bool IsSelected
{
    get { return (bool)GetValue(IsSelectedProperty); }
    set { SetValue(IsSelectedProperty, value); }
}
© www.soinside.com 2019 - 2024. All rights reserved.