您可以将VisualTreeHelper.HitTest与GeometryHitTestParameters参数和HitTestFilterCallback一起使用,以检查Visual是否是Panel的直接子项.
像这样的东西:
var selectedElements = new List<DependencyObject>();
var rect = new RectangleGeometry(...);
var hitTestParams = new GeometryHitTestParameters(rect);
var resultCallback = new HitTestResultCallback(
result => HitTestResultBehavior.Continue);
var filterCallback = new HitTestFilterCallback(
element =>
{
if (VisualTreeHelper.GetParent(element) == panel)
{
selectedElements.Add(element);
}
return HitTestFilterBehavior.Continue;
});
VisualTreeHelper.HitTest(
panel, filterCallback, resultCallback, hitTestParams);
Run Code Online (Sandbox Code Playgroud)
它看起来有点复杂,但是HitTestFilterCallback必须在视觉树中获取所有Visual,而不仅仅是实际受到攻击的那些.例如,如果面板包含Label控件,HitTestResultCallback则只会为每个Label的Border和TextBlock子Visuals调用.
| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |