鼠标捕获时IsMouseOver

时间:2012-04-26 12:19:16

标签: wpf

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

2 个答案:

答案 0 :(得分:3)

我知道这是几年前被问到的,但是万一有人从搜索引擎(就像我一样)来到这里,这就是我为自己解决问题的方法。不要使用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
}

N.B。如果您还没有阅读过该问题,请注意此方法是针对“捕获”鼠标并因此IsMouseOver属性无法正常工作的情况的解决方法。在正常情况下,您应始终使用IsMouseOver

答案 1 :(得分:0)

当用户拖动某物时,鼠标被捕获"在那一刻,鼠标事件不会被发送到鼠标经过的控件。只有实际捕获鼠标"的控件才会接收鼠标事件。因此,您需要在那里处理那些事件。这应该很容易。 如果您有任何问题,请随时给我发送一些示例代码,我会为您检查。最好的愿望。