DependencyProperty没有写在派生类中
本文关键字:派生 DependencyProperty | 更新日期: 2023-09-27 18:08:52
我正在使用WPF/XAML,并根据window
定义了自己的视图,称为container
。container
有一个名为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();
}
}
我的问题是属性的set方法从来没有从DerivedContainer
调用
这不是问题——这是预期的行为。WPF直接调用SetValue
,而不是通过包装器。包装器的存在是为了方便其他客户机代码。如果您需要在设置属性时做一些事情,您需要在DependencyProperty.Register
调用中注册一个回调。