WPF覆盖依赖项属性metdata无法正常工作

Deb*_*eep 1 .net c# wpf

我需要监视WPF窗口上最顶层的属性值更改.我写的是这样的:

static MainWindow()
        {
           TopmostProperty.OverrideMetadata(typeof(Window), new PropertyMetadata(new PropertyChangedCallback(Changed)));
        }

        public MainWindow()
        {
            InitializeComponent();
        }

        private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            throw new NotImplementedException();
        }
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个例外:他调用类型'WpfApplication4.MainWindow'上的构造函数,它与指定的绑定约束相匹配,引发了一个异常.行号'4'和行位置'9'."

Ath*_*ari 5

两个错误:

  1. 第一个参数OverrideMetadata必须是你的类型.

  2. 第二个参数的类型必须与基本类型中的相同.

    TopmostProperty.OverrideMetadata(
        typeof(MainWindow),
        new FrameworkPropertyMetadata(Changed));
    
    Run Code Online (Sandbox Code Playgroud)
  3. (额外奖励)如果您只需要更改通知,则无需覆盖元数据.

  • @AdiLester请参阅[框架属性元数据 - 指定元数据](http://msdn.microsoft.com/en-us/library/ms751554.aspx#Specifying_Metadata):`对于现有属性(AddOwner或OverrideMetadata调用),您应始终覆盖使用原始注册所使用的元数据类型. (2认同)