我有一个正常的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,工作一种享受。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top