在查看示例附加属性和行为时,我看到了
FrameworkPropertyMetadata
、UIPropertyMetadata
和 PropertyMetadata
的混杂使用。既然它们都形成了继承层次结构,那么我该如何选择使用哪一个呢?
这些类用于报告依赖属性的一些行为方面。
检查不同类别提供的选项。
例如,
如果您只想通过 dp 支持属性并提供默认值,请使用
PropertyMetadata
,
如果要指定动画行为,请使用
UIPropertyMetadata
,
但是如果某些属性影响 wpf 框架级别的内容,例如元素布局、父布局或数据绑定,请使用
FrameworkPropertyMetadata
。
详细信息可以查看msdn http://msdn.microsoft.com/en-us/library/ms751554.aspx
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); }
}