Я столкнулся со странной проблемой с прикрепленными свойствами: когда я присваиваю имя свойства в вызове RegisterAttached и правильно называю имя прикрепленного свойства (скажем, TranslateProperty и «Перевести»), код для реализации прикрепленного свойства не работает. огонь. Просто не звонят. Если я изменю имя строки на любое другое, кроме Translate (скажем, «Translate_»), код будет вызываться просто отлично.
Вот реализация:
открытый класс TranslateExtension: DependencyObject {
public static readonly DependencyProperty TranslateProperty =
DependencyProperty.RegisterAttached("Translate_",
typeof(bool),
typeof(TranslateExtension),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
public static void SetTranslate(UIElement element, bool value)
{
AssignKeys(element);
element.SetValue(TranslateProperty, value);
}
public static bool GetTranslate(UIElement element)
{
return (bool)element.GetValue(TranslateProperty);
}
public bool Translate
{
set { base.SetValue( TranslateProperty, value); }
}
...
}
Вышеупомянутое на самом деле работает, потому что свойство в строке — Translate_. Если я изменю строковое значение на «Перевести», это не удастся.
У меня есть 2 других прикрепленных свойства в том же классе, и они демонстрируют точно такое же поведение - то же имя, что и у AttachedProperty, и они не вызываются. Назовите это как-нибудь иначе, и оно сработает.
Я не уверен, что здесь происходит. Мой код на самом деле работает с недопустимыми именами, но я не понимаю, почему, и, что более важно, я не уверен, вызывает ли это неправильное имя какие-либо побочные эффекты.
Может ли кто-нибудь увидеть, не упускаю ли я из виду что-то болезненно очевидное? Я просмотрел несколько примеров в статьях AttachedProperties, и я не вижу этих реализаций, использующих специальные имена — они всегда называют строковое свойство так же, как прикрепленные свойства.