私はRegisterAttachedへの呼び出しでプロパティ名を割り当て、接続プロパティの名前に対して正しく名前を付けると、接続プロパティで奇妙な問題に遭遇しました(TranslatePropertyとTranslate ")、アタッチされたプロパティ実装のコードは起動しません。ちょうど呼ばれることはありません。文字列名をTranslate( "Translate_"と言う)以外のものに変更すると、コードはうまく呼び出されます。RegisterAttached String AttachPropertyを起動させないPropertyName
は、ここに実装だ:
パブリッククラスTranslateExtension:文字列のプロパティがTranslate_あるので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の記事でいくつかの例を再考しましたが、特別な名前を使用した実装は見られません。文字列プロパティは常に添付プロパティと同じ名前です。
これはまさにそれです!新しいFrameworkMetaData()コンストラクタにPropertyChangedCallback()を追加すると、そのトリックが実行されました。 まだ無効な名前(「Translate_」など)を使用すると、SetTranslateメソッドが呼び出される原因となるのでしょうか。これは本当に奇妙な行動です。 –