如何继续对特定FrameworkElement进行命中测试

时间:2016-10-19 06:48:58

标签: wpf hittest

假设我们有两个叠加的矩形r1r2 r1.Zindex < r2.Zindexr2.IsHitTestVisible必须为true,因为r2有工具提示,r2仅在鼠标悬停r1时可见。

使用默认的WPF命中测试,当鼠标悬停在这些矩形上时,r2闪烁,因为:

  • r2不可见时,r1是最受欢迎的测试可见元素,因此鼠标已超过r1,将r2设置为可见。
  • r2可见时,r1不再是最受欢迎的测试可见元素,因此不会认为鼠标位于其上方,反过来隐藏r2

这是一个具体的例子:

Canvas canvas = new Canvas();
canvas.Width = 500;
canvas.Height = 300;

Rectangle r1 = new Rectangle();
r1.Width = 200;
r1.Height = 100;
r1.Fill = new SolidColorBrush(Colors.Red);
Canvas.SetLeft(r1, 100);
Canvas.SetTop(r1, 100);
canvas.Children.Add(r1);

Rectangle r2 = new Rectangle();
r2.Width = 200;
r2.Height = 100;
r2.Fill = new SolidColorBrush(Colors.Blue);
Canvas.SetLeft(r2, 100);
Canvas.SetTop(r2, 100);
canvas.Children.Add(r2);

r1.IsHitTestVisible = true;
r2.IsHitTestVisible = true;
r2.ToolTip = "r2";
r2.Visibility = Visibility.Hidden;

r1.MouseEnter += (sender, e) => r2.Visibility = Visibility.Visible;
r1.MouseLeave += (sender, e) => r2.Visibility = Visibility.Hidden;

为了避免这种闪烁情况并且能够显示r2的工具提示,我想修改默认的HitTesting算法,以便:

  • r2仍然可以看到命中测试,但遇到时不会停止HitTest研究。
  • r1保持相同的行为。

0 个答案:

没有答案