将 PropertyChangedCallback 添加到基类的只读依赖属性

Posted

技术标签:

【中文标题】将 PropertyChangedCallback 添加到基类的只读依赖属性【英文标题】:Add PropertyChangedCallback to a readonly dependency property of the base class 【发布时间】:2021-03-10 15:25:50 【问题描述】:

我需要将属性更改的回调方法注册到菜单项的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)
    

    

【问题讨论】:

docs.microsoft.com/en-us/dotnet/api/… 【参考方案1】:

我已经使用DependencyPropertyDescriptor解决了。

DependencyPropertyDescriptor.FromProperty(IsHighlightedProperty, typeof(MyMenuItem))
    ?.AddValueChanged(this, (s, e) => OnHighlightChanged(IsHighlighted));

【讨论】:

以上是关于将 PropertyChangedCallback 添加到基类的只读依赖属性的主要内容,如果未能解决你的问题,请参考以下文章

将自己的博客园,打造成个人知乎

如何将thinkcmf导入eclipse

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到