2012-03-20 20 views
0

送信者がGroupBoxに含まれているかどうかをifステートメントが含まれるコード(具体的にはイベントハンドラ)を記述する方法を理解しようとしています。コントロールがGroupBoxにあるかどうかのテスト

たとえば、2つのGroupBoxがあり、それぞれにグリッドが含まれ、そのグリッドにテキストボックスが含まれているとします。私は "TextUpdated"用の単一のイベントハンドラを記述して、イベントが発生しているグループボックスを区別することができます(ただし、これは2つのTextBoxだけに過度に複雑に聞こえるかもしれませんが、私が取り組んでいる状況では、イベントハンドラは同じです)。

送信者を作成する方法はありますか.IsContainedIn(GroupBoxOne)bool? GroupBox.Parent(xyz)を使用すると、各グループボックスにグリッドがあるため、代わりにグリッドを親としてピックアップするため、動作していないようです。

うまくいけば、これは理にかなっています...ありがとうございます。

答えて

5

VisualTreeHelper.GetParentを使用すると、ビジュアルツリーを走査できます。

Hereは、どのように行うかに関する素晴らしい実装です。

+0

アヌラーグはあなたに良い答えを与えました! – Rhyous

0

コード:

// walk up the visual tree to find object of type T, starting from initial object 
public static T FindUpVisualTree<T>(DependencyObject initial) where T : DependencyObject 
{ 
    DependencyObject current = initial; 

    while (current != null && current.GetType() != typeof(T)) 
    { 
     current = VisualTreeHelper.GetParent(current); 
    } 
    return current as T; 
} 

使用法:

Grid gridContainingButton = FindUpVisualTree<Grid>(button01); 
関連する問題