#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:
Я решил с помощью DependencyPropertyDescriptor
.
DependencyPropertyDescriptor.FromProperty(IsHighlightedProperty, typeof(MyMenuItem))
?.AddValueChanged(this, (s, e) => OnHighlightChanged(IsHighlighted));