我的元素上有一个IsMouseOver触发器。我还有一个拖动动作正在发生,其中另一个元素捕获鼠标,因此IsMouseOver触发器永远不会发生,但我明确地希望它在某些元素上发生时我拖过它(鼠标捕获和所有)。这可能吗?
答案 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)
当用户拖动某物时,鼠标被捕获"在那一刻,鼠标事件不会被发送到鼠标经过的控件。只有实际捕获鼠标"的控件才会接收鼠标事件。因此,您需要在那里处理那些事件。这应该很容易。 如果您有任何问题,请随时给我发送一些示例代码,我会为您检查。最好的愿望。