我想在Canvas上測試一堆用戶控件。我不希望HitTest()遍歷整個可視化樹,所以我使用FilterCallback來確保我只是命中測試UserControl。問題與WPF中的VisualTreeHelper.HitTest
我的問題是,用戶控件從來沒有打,它應該,但它沒有。如果我使用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.
}
可以確認這個工作。應該是被接受的答案,因爲它比手動搜索視覺樹更好。 – Lennart 2016-07-05 12:48:37