题
我有一个正常的WPF窗口,让我们称之为TopLevel
其具有在它一堆控制,除其他事项外的简单ListView
应登录在应用程序中的不同元素的某些事件。
因此,假设我在Grid
一个TopLevel
其中包含一串称为Task
用户控制的。每个Task
具有它们作为一个公共属性相关联的对象,让我们称之为Order
,以及一个标准的复选框。
现在我想TopLevel
来接收事件,每当用户检查在Task
一个复选框,但该事件应包含Order
对象为好,这样我就可以用它从TopLevel
工作,把它放入事件日志。
我该怎么办呢?我猜我想用路由事件,但我无法弄清楚如何获得的复选框点击“查找” Order
向上发送到TopLevel
。
解决方案
如何这样的事情...
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
Task task = FindParentTask(checkBox);
Order order = task.Order;
}
既然你需要遍历了可视化树去工作,你可以尝试有点递归...
的public FrameworkElement FindParentTask(FrameworkElement element)
{
if (element.Parent.GetType() == typeof(Task))
return element.Parent as FrameworkElement;
else
return FindParentTask(element.Parent as FrameworkElement);
}
我刚刚测试过这个方法来检索父扩展为我的用户控件的一个复选框,这几个层次了可视化树,嵌套在StackPanels一堆,网格和DockPanels,工作一种享受。
不隶属于 StackOverflow