DependencyProperty没有写在派生类中

本文关键字:派生 DependencyProperty | 更新日期: 2023-09-27 18:08:52

我正在使用WPF/XAML,并根据window定义了自己的视图,称为containercontainer有一个名为CurrentElementProperty的DependencyProperty链接到属性CurrentElement。我的问题是,该属性的set方法从未从DerivedContainer调用。如果我在属性注册期间将typeof(Container)更改为typeof(DerivedContainer),它将被调用。我几乎可以肯定,我在注册时做错了什么。

Container定义

class Container : Window
{
    public static readonly DependencyProperty CurrentElementProperty = 
        DependencyProperty.Register(
            "CurrentElement",
            typeof(Element),
            typeof(Container),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.Inherits));
    public Element CurrentElement
    {
        get
        {
            return (Element)this.GetValue(Container.CurrentElementProperty);
        }
        set
        {
            this.SetValue(Container.CurrentElementProperty, value);
        }
    }
}

DerivedContainer的XAML(我删除了标准的XML名称空间定义)

<local:Container x:Class="ns.DerivedContainer"
                 xmlns:local="clr-namespace:ns">
  <local:Container.CurrentElement>
    <Element />
  </local:Container.CurrentElement>
</local:Container>

DerivedContainer

背后代码
public partial class DerivedContainer : Container
{
    public DerivedContainer()
    {
        InitializeComponent();
    }
}

DependencyProperty没有写在派生类中

我的问题是属性的set方法从来没有从DerivedContainer

调用

这不是问题——这是预期的行为。WPF直接调用SetValue,而不是通过包装器。包装器的存在是为了方便其他客户机代码。如果您需要在设置属性时做一些事情,您需要在DependencyProperty.Register调用中注册一个回调。