2011-02-09 21 views
3

私はusercontrolを作成しましたがうまくいますが、このコントロールの2つのインスタンスを1つのウィンドウに配置すると、最後のものだけが動作します。私は解決策を見つけようとしましたが、その依存プロパティは共有されていることに気がつきましたが、どうやって動かすのか分かりません。WPF:usercontrolのインスタンスは依存関係のプロパティを共有します

public double AnimatingVerticalOffset 
    { 
     get { return (double)GetValue(AnimatingVerticalOffsetProperty); } 
     set { SetValue(AnimatingVerticalOffsetProperty, value); } 
    } 

    public static readonly DependencyProperty AnimatingVerticalOffsetProperty; 

    static ListChooser() 
    { 
     ListChooser.AnimatingVerticalOffsetProperty = 
        DependencyProperty.Register("AnimatingVerticalOffset", typeof(double), typeof(ListChooser), new UIPropertyMetadata(OnAnimationVerticalOffsetChanged)); 
    } 
+0

@user:依存関係のプロパティが「共有されている」理由について詳しく説明できますか?投稿したコードは正しいように見えますが、サンプルがなくても、あなたが見ている問題はわかりません。 –

+0

こんにちは、ここに私の問題です:私はこのコンポーネントのより多くのインスタンスでウィンドウを起動すると、最後に作成されたインスタンスのみ依存プロパティを変更します。残りの値は最後のインスタンスによって設定された値を参照しますが、このプロパティを設定することはできません。例外やそれ以外の何かが働いていないだけです。 – JanSkalicky

+0

すみません、申し訳ありません。問題は他の場所にあった、私はすでにそれを解決するが、それは本当に奇妙だった。 – JanSkalicky

答えて

2

は、依存関係プロパティ自体が1つのインスタンスにノーネクタイで静的である必要があります。

は、ここに私の依存関係プロパティです。また、コールバックにも適用されます(OnAnimationVerticalOffsetChangedの場合) - これらは静的メソッドでなければなりません(オブジェクトインスタンスがパラメータを介して渡されることを心配しないでください。一緒に働いている)。

静的初期化子を使用してDPを初期化する必要があります。使用したメソッド(コンストラクタで初期化)は動作しますが、DPはインスタンスごとに上書きします。

See this question for deeper explanation.

EDIT:

修正されたコード:

public double AnimatingVerticalOffset 
{ 
    get { return (double)GetValue(AnimatingVerticalOffsetProperty); } 
    set { SetValue(AnimatingVerticalOffsetProperty, value); } 
} 

public static readonly DependencyProperty AnimatingVerticalOffsetProperty = 
       DependencyProperty.Register("AnimatingVerticalOffset", typeof(double), typeof(ListChooser), new UIPropertyMetadata(OnAnimationVerticalOffsetChanged)); 

static ListChooser() 
{ 
} 

コールバックが静的でない場合は、(=>あなたはそれを静的にする必要があり)、エラーをコンパイルされます。

EDIT:

DP定義プロパティの値自体、静的ではありません、覚えておいてください! DPは他のプロパティとまったく同じように動作します。値の継承、bidnings、アニメーションなどのいくつかの追加機能があります。

+0

私はこれを理解していると思うが、それを行う方法がなければならない。テキストボックスのFontSizeプロパティはどうでしょうか?どうしたの?私はこのプロパティをアニメートする必要があるので、依存プロパティで検索しています。 – JanSkalicky

+0

FontSizeは、私が投稿したのと同じように定義されています。私はその説明を編集して投稿を編集しました。そして心配しないで、私が投稿したものを試してみてください。それは動作します:) –

+0

OPは静的なコンストラクタで初期化されています - 何も間違ってはいけません。静的コンストラクタは、インスタンスごとに呼び出されません。 –

関連する問題