代码之家  ›  专栏  ›  技术社区  ›  Deniz Dogan

wpf:带有额外信息的自定义路由事件

  •  1
  • Deniz Dogan  · 技术社区  · 15 年前

    我有一个普通的WPF窗口,我们称之为 TopLevel 其中包含一系列控件,其中包括 ListView 它应该在应用程序的不同元素中记录某些事件。

    所以假设我有一个 Grid 在里面 托普维尔 其中包含一组名为 Task . 各 任务 有一个与它们关联的对象作为公共属性,我们称之为 Order 以及标准复选框。

    现在我想要 托普维尔 每当用户选中 任务 ,但事件应包含 秩序 对象,以便我可以从 托普维尔 将其放入事件日志。

    我该怎么做?我猜我想为它使用路由事件,但我不知道如何获得复选框单击“查找” 秩序 把它送到 托普维尔 .

    1 回复  |  直到 15 年前
        1
  •  1
  •   TabbyCool    15 年前

    像这样的东西怎么样…

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

    我刚刚测试了这个方法来检索我的一个用户控件上的一个复选框的父展开器,它在可视化树上的几个层次上,嵌套在一堆StackPanel、Grids和DockPanels中,起到了一个作用。