Я использую свойство зависимости, которое обрабатывает появление / исчезновение элемента Framework.
Свойство может обрабатывать анимацию постепенного появления / исчезновения, регистрируя методы обратного вызова для каждого случая, когда свойство Visibility анимированного элемента изменилось.
Это было сделано предыдущим кодером как таковым:
UIElement.VisibilityProperty.AddOwner(typeof (FrameworkElement), new FrameworkPropertyMetadata(Visibility.Visible, VisibilityChanged, CoerceVisibility));
Проблема здесь в том, что FrameworkElement уже является владельцем VisibilityProperty и, как таковой, вызывает исключение, которое было отловлено (к счастью) ExpressionBlend.
Чтобы противостоять этой проблеме, я заметил, что в Dependency Properties есть метод «OverwriteMetadata», который позволяет кому-то перезаписывать метаданные данного типа, в моем случае FrameworkElement.
Поэтому я мог бы использовать следующее:
UIElement.VisibilityProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(Visibility.Visible, VisibilityChanged, CoerceVisibility));
Мой вопрос:
Насколько безопасно перезаписывать метаданные видимости FrameworkElement? Если это небезопасно, какие у меня есть альтернативы?
РЕДАКТИРОВАТЬ: Ну, поцарапайте это ... Очевидно, перезапись метаданных вызывает другое исключение: «PropertyMetadata уже зарегистрирован для типа« FrameworkElement ».
Как добавить методы обратного вызова для свойства зависимостей, если я не могу добавить владельца или перезаписать метаданные?
Я вынужден создать класс, производный от FrameworkElement, добавить его в качестве владельца VisibilityProperty и сделать все элементы управления, использующие это свойство, того же типа, что и производный класс?