我正在试图弄清楚如何编写包含if语句的代码(特别是事件处理程序),无论发件人是否包含在GroupBox中。
例如,假设我有两个GroupBox,每个包含一个网格,然后该网格包含一个文本框。我想为“TextUpdated”编写一个单独的事件处理程序,它可以区分事件来自哪个groupbox(虽然这对于两个TextBox来说听起来过于复杂,我正在处理的情况在每个groupbox中有很多控件,但是事件处理程序是相同的。)
有没有办法让sender.IsContainedIn(GroupBoxOne)一个bool?因为我在每个组框中都有一个网格,所以使用GroupBox.Parent(xyz)似乎不起作用,因为它将网格作为父网格。
希望这很有道理......非常感谢。
答案 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);