アタッチされたプロパティで奇妙な問題が発生しました。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の記事でいくつかの例を再検討しましたが、特別な名前を使用した実装は見当たりません。これらの実装では、常に文字列プロパティに添付プロパティと同じ名前が付けられています。