我遇到了附加属性的一个奇怪问题,当我在调用 RegisterAttached 中分配属性名称并正确命名附加属性的名称(比如 TranslateProperty 和“Translate”)时,附加属性实现的代码不会不开火。就是不叫。如果我将字符串名称更改为 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 的文章中重新审视了一些示例,但我没有看到那些使用特殊名称的实现——它们总是将字符串属性命名为与附加属性相同的名称。