DepenencyProperty AddOwner是否包含FrameworkPropertyMetadata?

时间:2017-12-12 10:47:01

标签: c# wpf

DependencyProperty设置的FrameworkPropertyMetadataOptions.BindsTwoWayByDefault通过AddOwner(typeof(NewOwner))在不同的控件中重用时,此重用包括双向绑定行为,还是应该像AddOwner(typeof(NewOwner, new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault))一样设置

我希望它确实如此,但不知怎的,它看起来并没有。当您使用属性上的GetMetadata检查元数据时,我无法检查添加的所有者。

见这个例子:

public class MyControl : Control
{
    public object SelectedItem
    {
        get { return (object)GetValue(SelectedItemProperty); }
        set { SetValue(SelectedItemProperty, value); }
    }

    public static readonly DependencyProperty SelectedItemProperty = ListBox.SelectedItemProperty.AddOwner(typeof(MyControl));
}

然后检查:

  var x = ListBox.SelectedItemProperty.GetMetadata(typeof(ListBox)) as FrameworkPropertyMetadata;
  bool bx = x.BindsTwoWayByDefault;  // true;
  var y = MyControl.SelectedItemProperty.GetMetadata(typeof(MyControl)) as FrameworkPropertyMetadata;
  bool by = y.BindsTwoWayByDefault; // null pointer excpetion

1 个答案:

答案 0 :(得分:0)

documentation

  

添加另一个类型作为已注册的依赖项属性的所有者,为依赖项属性提供依赖项属性元数据,因为它将存在于提供的所有者类型上。