Добавить PropertyChangedCallback к свойству зависимости, доступному только для чтения базового класса

#c# #wpf #dependency-properties #readonly #inotifypropertychanged

#c# #wpf #зависимость-свойства #только для чтения #inotifypropertychanged

Вопрос:

Мне нужно зарегистрировать метод обратного вызова, измененный на IsHighlighted свойство menuitem.
Но при выполнении я получаю исключение, в котором говорится, что 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)
    {

    }
}
 

Комментарии:

1. docs.microsoft.com/en-us/dotnet/api/…

Ответ №1:

Я решил с помощью DependencyPropertyDescriptor .

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