2016-09-15 1 views
3

私はこのような構造を持つToggleButtonをしました:VisualParentのDataContextを取得するには?

private void ToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e) 
{ 
    //store settings 
} 

私は私がこれをどのように行うことができ、特にDataContextVisualParentの詳細を取得する必要がありますか?ありがとう。

UPDATE

XAML構造はこれです:あなたが別のコントロールを持つことができる代わりに、グリッドの

<ToggleButton Focusable="False" Width="19" Height="19" IsChecked="{Binding Path = IsFavourite}" 
        Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked"> 
+0

可能であれば、xaml構造を共有します。 – Versatile

+0

あなたの質問が解決された場合は、答えとしてマークすることを忘れないでください。 – Versatile

答えて

1
((sender as System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).DataContext 

。だからあなたのxaml構造ごとに置き換えてください。

+0

あなたのコードによって返されるオブジェクトのNameプロパティを取得することは可能ですか? – AgainMe

+0

はい。グリッドの名前、つまり親を探していますか? ((送信者はSystem.Windows.Controls.Primitives.ToggleButton).Parentはグリッド).Name – Versatile

0

更新日:

本当に必要ですか? XAMLを見ると、ToggleButtonにDataContextが設定されていないので、その値を設定する親からその値を継承する必要があります。

参照:DataContext

この依存プロパティはプロパティ値を継承します。ローカル値またはスタイルによって確立されたDataContextの他の値を持たない子要素がある場合、プロパティシステムは、この値が割り当てられた最も近い親要素のDataContext値に値を設定します。とにかく

、あなたがそれを必要とする場合...

ORIGINAL: あなたのXAML内の特定の構造が間違っていると仮定し、任意の答え。構造を変更するテンプレートをいつでも適用できます。

このように言えば、VisualTreeHelperクラス(GetParentメソッド)を使用してビジュアルツリーを移動できます。最初のパラメータは、チェックされたコントロールへの参照です。だから、

、私の頭の上から、私はあなたが次の操作を行うことができると思います:

DependencyObject source = sender as DependencyObject; 
if(null != source) { 
    DependencyObject parent = VisualTreeHelper.GetParent(source); 
    FrameworkElement parentElement = parent as FrameworkElement; 
    if(null != parentElement) { 
     object context = parentElement.DataContext; 
    } 
} 

あなたはヘルパーメソッドでこれを考慮する必要があります。

public static FrameworkElement GetParentContext(FrameworkElement element) { 
    object result = null; 
    DependencyObject parent = VisualTreeHelper.GetParent(element); 
    FrameworkElement parentElement = parent as FrameworkElement; 
    if(null != parentElement) { 
     result = parentElement.DataContext; 
    } 
    return result;   
} 

ことを考えることをご検討くださいXAML構造体は異なるかもしれませんnullではないDataContextの要素を見つけるまで、多分あなたはツリーを上る必要があります。

関連する問題