2009-06-17 1 views
1

私は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の記事でいくつかの例を再考しましたが、特別な名前を使用した実装は見られません。文字列プロパティは常に添付プロパティと同じ名前です。

答えて

2

SetTranslateには、呼び出されないため、余分なコードを入れないでください。 MSDN hereから:カスタム依存関係プロパティ

ため

影響 プロパティ設定のためのXAMLプロセッサの動作の現在のWPF実装 は完全に、あなたがどんな 追加のロジックを置くべきではありません ラッパーを迂回するので カスタム依存プロパティのラッパーの定義 の定義に追加します。そのようなロジックをセット定義に入れて とすると、 のコードではなく、 のプロパティがXAMLに設定されていると、ロジックは実行されません。

同様に、XAML プロセッサの他の態様は、XAML処理からプロパティ値 もなくラッパーを使用するよりもGetValueメソッド を使用し得ること。 したがって、 の追加実装は、GetValue呼び出しを超えてget 定義を取得しないようにする必要があります。

代わりに、PropertyChangedCallbackをFrameworkPropertyMetadataに追加します。

+0

これはまさにそれです!新しいFrameworkMetaData()コンストラクタにPropertyChangedCallback()を追加すると、そのトリックが実行されました。 まだ無効な名前(「Translate_」など)を使用すると、SetTranslateメソッドが呼び出される原因となるのでしょうか。これは本当に奇妙な行動です。 –

関連する問題