我碰到一個奇怪的問題,在那裏,當我在調用RegisterAttached和名稱指定屬性的名稱正確的附加屬性的名稱附加屬性(比如TranslateProperty和「翻譯「)所附屬性實現的代碼不會觸發。只是不叫。如果我將字符串名稱更改爲除Translate之外的任何內容(比如「Translate_」),代碼就會被調用。RegisterAttached字符串屬性名造成AttachedProperty不火
這裏的實現:
公共類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_。如果我將字符串值更改爲「Translate」,則失敗。
我在同一個班2個附加屬性,它們表現出完全一樣的行爲 - 相同的名稱AttachedProperty,他們不會被調用。將其命名爲其他內容並且可以工作。
我不確定這裏發生了什麼事。我的代碼實際上使用了無效的名稱,但我不明白爲什麼,更重要的是,我不確定這個錯誤的命名是否會導致任何副作用。
任何人都可以看到我是否忽視的東西非常明顯?我重新訪問了AttachedProperties文章中的幾個例子,我沒有看到使用特殊名稱的實現 - 它們總是將字符串屬性命名爲與附加屬性相同。
是的,這就是它!將PropertyChangedCallback()添加到新的FrameworkMetaData()構造函數中有訣竅。 我仍然想知道爲什麼有一個無效名稱(如「Translate_」)會觸發SetTranslate方法來調用。這真是奇怪的行爲。 – 2009-06-17 22:02:08