我正在尝试在画布(Canvas)上进行一堆UserControl的命中测试(HitTest())。我不希望HitTest()遍历整个可视树,因此我使用了FilterCallback来确保只对UserControl进行命中测试。
我的问题是UserControl从未被命中,它应该被命中,但实际上并没有。如果我使用FilterCallback,则返回未命中任何内容。如果我让HitTest运行整个可视树,则跳过了UserControl。
下面是一些代码:
我的问题是UserControl从未被命中,它应该被命中,但实际上并没有。如果我使用FilterCallback,则返回未命中任何内容。如果我让HitTest运行整个可视树,则跳过了UserControl。
下面是一些代码:
<Canvas x:Name="Container">
<UserControl>
<Grid>
<Rectangle />
</Grid>
</UserControl>
<UserControl>
<Grid>
<Rectangle />
</Grid>
</UserControl>
</Canvas>
...
VisualTreeHelper.HitTest(Container, OnFilter, OnResult, myPoint);
...
private void OnResult(DependencyObject o)
{
//I'll get the Rectangle here, but never the userControl
}
private void OnFilter(DependencyObject o)
{
//I will get the UserControl here, but even when I do nothing more than continue, it will not trigger a visualHit. But the child rectangle will.
}