c# – 具有隐藏/折叠元素的默认WPF HitTest行为
发布时间:2020-12-15 08:01:30 所属栏目:百科 来源:网络整理
导读:在 WPF中使用VisualTreeHelper.HitTest时,甚至找到隐藏的元素.要跳过这些元素并仅返回可见的结果,我创建了一个HitTestFilter,如下所示: ///This Filter should cut all invisible or not HitTest Enabled Elementsprivate static HitTestFilterBehavior MyH
在
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在这种情况下做了什么?它是否使用类似的过滤器?这样做还有其他更好的选择吗? 澄清一个简短的描述: 在图像中有 >布局容器作为根元素 如果我有这样的布局并在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); 第二个版本会跳过不可见的元素(而第一个版本则不会). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |