2012-03-20 25 views
0

我想弄清楚如何編寫代碼(特別是一個事件處理程序),其中包含一個if語句是否發件人包含在一個GroupBox中。測試控件是否在組框

例如,假設我有兩個GroupBox,每個都包含一個網格,然後該網格包含一個文本框。我想爲「TextUpdated」編寫一個單獨的事件處理程序,它可以區分事件來自哪個groupbox(儘管這聽起來可能僅僅是兩個TextBoxes過於複雜,但我正在處理的情況在每個groupbox中都有很多控件,但事件處理程序是相同的)。

有沒有辦法讓sender.IsContainedIn(GroupBoxOne)成爲布爾型?因爲我在每個groupbox中都有一個網格,所以使用GroupBox.Parent(xyz)似乎無法正常工作,因爲它會將網格視爲父級而不是父級。

希望這是有道理的...非常感謝。

回答

5

您可以使用VisualTreeHelper.GetParent來遍歷可視化樹。

Here是如何做到這一點很好的實施。

+0

阿努拉格給你一個很好的答案! – Rhyous 2012-03-20 03:52:59

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);