1

我正在使用 WPF/XAML 并基于window调用定义了我自己的视图containercontainer有一个 DependencyProperty 称为CurrentElementProperty链接到属性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);
        }
    }
}

XAML 的DerivedContainer(我删除了标准的 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();
    }
}
4

1 回答 1

3

我的问题是永远不会从 DerivedContainer 调用属性的 set 方法

这不是问题 - 这是预期的行为。WPFSetValue直接调用而不是通过包装器。包装器的存在是为了方便其他客户端代码。如果您需要在设置属性时执行某些操作,则需要在DependencyProperty.Register调用中注册回调。

于 2013-04-12T07:54:46.743 回答