简化的例子是这样的;
想象一下由两个重叠的元素 A 和 B 组成的维恩图。
如果我将鼠标悬停在(A AND(NOT B))上,则所有 A 都会亮起。
如果我将鼠标悬停在(B AND(NOT A))上,则所有 B 都会亮起。
如果我将鼠标悬停在(A 和 B)上,两者都会亮起。只有最上面的部分被标记为鼠标悬停在上面。
有没有办法让 IsMouseOver 像这样隧道?
如果没有,有什么建议吗?
您可以使用 VisualTreeHelper 进行手动命中测试。这可以进入某个父对象上的 MouseMove 处理程序。这里我假设一个由名为 RedCircle 和 BlueCircle 的椭圆组成的维恩图:
bool overRed = false;
bool overBlue = false;
if (BlueCircle.IsMouseOver || RedCircle.IsMouseOver)
{
HitTestParameters parameters = new PointHitTestParameters(e.GetPosition(RedCircle));
VisualTreeHelper.HitTest(RedCircle, new HitTestFilterCallback(element => HitTestFilterBehavior.Continue), result =>
{
if (result.VisualHit == RedCircle)
overRed = true;
return HitTestResultBehavior.Continue;
}, parameters);
parameters = new PointHitTestParameters(e.GetPosition(BlueCircle));
VisualTreeHelper.HitTest(BlueCircle, new HitTestFilterCallback(element => HitTestFilterBehavior.Continue), result =>
{
if (result.VisualHit == BlueCircle)
overBlue = true;
return HitTestResultBehavior.Continue;
}, parameters);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)