将 PropertyChangedCallback 添加到基础 class 的只读依赖项 属性
Add PropertyChangedCallback to a readonly dependency property of the base class
我需要将 属性 更改的回调方法注册到菜单项的 IsHighlighted
属性。
但是在执行时我得到一个异常,表明 IsHighlighted 被注册为只读。
添加回调方法有什么想法,或者是否有其他方法来检查 属性 变化?
public class MyMenuItem : MenuItem
{
static MyMenuItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyMenuItem),
new FrameworkPropertyMetadata(typeof(MyMenuItem)));
/* IsHighlighted was registered as readonly and is not possible
override metadata without an authorization key. */
IsHighlightedProperty.OverrideMetadata(typeof(MyMenuItem),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIsHighlightedChanged)));
}
private static void OnIsHighlightedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
}
我已经使用 DependencyPropertyDescriptor
解决了。
DependencyPropertyDescriptor.FromProperty(IsHighlightedProperty, typeof(MyMenuItem))
?.AddValueChanged(this, (s, e) => OnHighlightChanged(IsHighlighted));
我需要将 属性 更改的回调方法注册到菜单项的 IsHighlighted
属性。
但是在执行时我得到一个异常,表明 IsHighlighted 被注册为只读。
添加回调方法有什么想法,或者是否有其他方法来检查 属性 变化?
public class MyMenuItem : MenuItem
{
static MyMenuItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyMenuItem),
new FrameworkPropertyMetadata(typeof(MyMenuItem)));
/* IsHighlighted was registered as readonly and is not possible
override metadata without an authorization key. */
IsHighlightedProperty.OverrideMetadata(typeof(MyMenuItem),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIsHighlightedChanged)));
}
private static void OnIsHighlightedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
}
我已经使用 DependencyPropertyDescriptor
解决了。
DependencyPropertyDescriptor.FromProperty(IsHighlightedProperty, typeof(MyMenuItem))
?.AddValueChanged(this, (s, e) => OnHighlightChanged(IsHighlighted));