测试控件是否在GroupBox中

时间:2012-03-20 01:48:01

标签: c# wpf

我正在试图弄清楚如何编写包含if语句的代码(特别是事件处理程序),无论发件人是否包含在GroupBox中。

例如,假设我有两个GroupBox,每个包含一个网格,然后该网格包含一个文本框。我想为“TextUpdated”编写一个单独的事件处理程序,它可以区分事件来自哪个groupbox(虽然这对于两个TextBox来说听起来过于复杂,我正在处理的情况在每个groupbox中有很多控件,但是事件处理程序是相同的。)

有没有办法让sender.IsContainedIn(GroupBoxOne)一个bool?因为我在每个组框中都有一个网格,所以使用GroupBox.Parent(xyz)似乎不起作用,因为它将网格作为父网格。

希望这很有道理......非常感谢。

2 个答案:

答案 0 :(得分:5)

您可以使用VisualTreeHelper.GetParent遍历可视树。

Here是一个很好的实现方法。

答案 1 :(得分: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);