【问题标题】:Can I HitTest element with lower ZIndex in WPF Canvas?我可以在 WPF Canvas 中使用 ZIndex 较低的 HitTest 元素吗?
【发布时间】:2014-03-31 18:18:37
【问题描述】:

当我在鼠标点击画布上使用System.Windows.Media.VisualTreeHelper.HitTest 时,它总是返回顶部的元素。我的意思是,如果有两个元素相互重叠,我得到的是画布中 ZIndex 较高的那个。

我也尝试过this way,但即使在我创建了IsHitTestVisible = False 之后,它仍然返回给我同样的一个。

有没有可能得到“下面”的元素?

【问题讨论】:

    标签: c# wpf canvas hittest


    【解决方案1】:

    请参阅此处的“命中测试和 Z-Order”部分:Hit Testing in the Visual Layer,以及此处的代码示例:VisualTreeHelper.HitTest Method

    简而言之,您需要使用采用HitTestResultCallbackHitTest() 方法之一,然后从您的回调中返回HitTestResultBehavior.Continue,直到找到您要查找的元素:

    Point pt = ...
    VisualTreeHelper.HitTest(myCanvas, null,
                             new HitTestResultCallback(MyHitTestResult),
                             new PointHitTestParameters(pt));
    ...
    
    private HitTestResultBehavior MyHitTestResult(HitTestResult result)
    {
        DoSomethingWith(result.VisualHit);
    
        //Set the behavior to return visuals at all z-order levels. 
        return HitTestResultBehavior.Continue;
    }
    

    【讨论】:

    • 创造奇迹!我花了一些时间来调整它,但当我调整它时——它变得很棒!
    猜你喜欢
    • 2021-06-15
    • 2012-04-23
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多