c# – 具有隐藏/折叠元素的默认WPF HitTest行为

WPF中使用VisualTreeHelper.HitTest时,甚至找到隐藏的元素.要跳过这些元素并仅返回可见的结果,我创建了一个HitTestFilter,如下所示:
///This Filter should cut all invisible or not HitTest Enabled Elements
private static HitTestFilterBehavior MyHitTestFilter(DependencyObject target)
{
    var uiElement = target as UIElement;
    if (uiElement != null){
        if(!uiElement.IsHitTestVisible || !uiElement.IsVisible))
            return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
    }
    return HitTestFilterBehavior.Continue;
}

这个过滤器完成了他的工作,但我想知道认的WPF HitTesting在这种情况下做了什么?它是否使用类似的过滤器?这样做还有其他更好的选择吗?

澄清一个简短的描述:

在图像中有

>布局容器作为根元素
> Button1可见
> Button1上方是Button2,它是不可见的

如果我有这样的布局并在Button2的绿色区域中进行鼠标点击,WPF会跳过Button2并且Button1上会出现click事件.

如果我在没有前面描述的过滤器的情况下进行手动HitTesting,我将得到Button2作为结果.

所以问题是,WPF使用的认行为/过滤器是什么?

在此先感谢您的任何建议.

解决方法

我知道这是一个相当古老的问题,但最近我遇到了类似的问题,并使用 UIElement.InputHitTest方法使其工作.

我换了

HitTestResult hitTest = VisualTreeHelper.HitTest(rootVisual,point);
IInputElement source = hitTest?.VisualHit as IInputElement;

IInputElement source = rootVisual.InputHitTest(point);

第二个版本会跳过不可见的元素(而第一个版本则不会).

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...