我的元素上有一个 IsMouseOver 触发器。我还发生了一个拖动动作,其中另一个元素捕获了鼠标,因此 IsMouseOver 触发器永远不会发生,但我明确希望它在我拖动它时发生在某些元素上(鼠标捕获和所有)。这可能吗?
问问题
627 次
2 回答
4
我知道这是几年前问的,但以防万一有人从搜索引擎登陆(就像我一样),这就是我自己解决问题的方法。不要使用IsMouseOver
属性,而是在代码中使用命中测试来确定鼠标是否在您的控件内:
bool IsMouseOverEx = false;
VisualTreeHelper.HitTest(this, d =>
{
if (d == this)
{
IsMouseOverEx = true;
return HitTestFilterBehavior.Stop;
}
else
return HitTestFilterBehavior.Continue;
},
ht => HitTestResultBehavior.Stop,
new PointHitTestParameters(Mouse.GetPosition(this)));
if (IsMouseOverEx)
{
//Do whatever you need in case of MouseOver
}
注意如果您还没有阅读该问题,请注意,此方法是针对鼠标被“捕获”并因此IsMouseOver
属性无法正常工作的情况的解决方法。在正常情况下,您应该始终使用IsMouseOver
.
于 2017-12-19T17:45:37.607 回答
0
当用户拖动某些东西时,鼠标在那一刻被“捕获”,并且鼠标事件不会发送到鼠标经过的控件。只有实际“捕获鼠标”的控件才会接收鼠标事件。因此,您需要在那里处理这些事件。这应该很容易。如果您有任何问题,请随时通过电子邮件向我发送一些示例代码,我会为您检查。最良好的祝愿。
于 2014-04-14T02:28:03.777 回答