【问题标题】:WPF layout and event routing (hit test) - how do I construct my hierarchy?WPF 布局和事件路由(命中测试) - 如何构建我的层次结构?
【发布时间】:2011-05-16 14:34:19
【问题描述】:

我试图解决以下问题: 我有一个 3 行 1 列的网格。每个单元格都有一些子控件。此外,我可以控制整个 3 行,就像我在整个网格中呈现一些视觉效果的“叠加层”。我需要对这个叠加层以及子控件进行命中测试。 但是,由于逻辑/视觉树的构造方式,叠加层的父级是 Grid 而不是其子级(在树中与叠加层位于同一级别)。 如何构建 WPF 树,以便事件冒泡到 Grid 的其他控件。

这棵树看起来像这样:

Grid
  - Row 1 Control
  - Row 2 Control
  - Row 3 Control
  - Overlay (Row 1 - 3) Control

如果覆盖不处理事件,我需要在第 1/2/3 行控件中处理它。我希望我的问题很清楚。

【问题讨论】:

    标签: .net wpf xaml wpf-controls


    【解决方案1】:

    使用 VisualTreeHelper.HitTest 查看 WPF 对 hittesting 的支持。

    【讨论】:

    • 谢谢,但我想我仍然需要一个可视化树,它正确地代表了我的问题。当对覆盖节点使用 VisualTreeHelper.HitTest 方法并且没有命中任何内容时,其他 3 个控件(第 1 - 3 行)将不会得到测试。
    • 如果您使用 VisualTreeHelper.HitTest 和您的 Grid 作为起始参考,HitTest 方法将测试 Grid 的所有子项,包括 Overlay 控件和其他三个控件。这在我提供的链接中的“可视化树如何影响命中测试”部分中进行了描述。
    • 谢谢,我错过了。你会如何处理其他事件?
    • 我不确定您指的是哪些事件?
    • 例如,其中一个控件可能是一个按钮,如果覆盖中没有任何内容被点击,我希望所有按钮事件都被触发,就好像它们不存在一样。
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2023-02-26
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多