12

我的元素上有一个 IsMouseOver 触发器。我还发生了一个拖动动作,其中另一个元素捕获了鼠标,因此 IsMouseOver 触发器永远不会发生,但我明确希望它在我拖动它时发生在某些元素上(鼠标捕获和所有)。这可能吗?

4

2 回答 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 回答