为什么拖放会阻止UIElement.IsMouseOver正确返回?

时间:2014-01-16 21:08:39

标签: wpf xaml drag-and-drop

我正在打开一个关于此问题原因的单独问题,以便我的另一个问题可能是关于可能的解决方法。

所以我为列表视图启用了拖放功能,但我注意到UIelement.IsMouseOver在拖放操作期间不起作用。特别是在拖放操作期间,如果在鼠标悬停在元素上时测试了IsMouseOver,则当它返回true时将返回false。在拖放操作之前测试时,相同的功能可以正常工作。

我还读到网上有问题。

来源:“这是因为当我们进行拖放操作时,WPF会阻止所有鼠标操作。您可以使用带有动画的EventTrigger来执行此操作。”

http://social.msdn.microsoft.com/Forums/vstudio/en-US/9a73b1b0-ec76-4b2c-8da6-91c71e3c406f/wpf-mouse-click-event-on-scrollbar-issue?forum=wpf

但是,我想知道究竟什么“阻止所有鼠标操作”需要。似乎有人应该修复IsMouseOver来进行拖放操作

1 个答案:

答案 0 :(得分:2)

我不认为这是一个问题,因为它是wpf的设计方式。执行拖放操作时,鼠标不会阻止捕获任何鼠标。为了将IsMouseOver属性设置为True,wpf中的控件或视觉需要捕获鼠标指针。但是,当您开始将某些内容从源控件拖动到目标控件时,目标控件不会在其上捕获鼠标,因为它是鼠标所在的源控件并且仍在按下。源控制需要捕获鼠标并保持它被捕获,直到完成所需的操作。例如,通过源控制捕获鼠标,源控件可以跟踪鼠标所在的位置并检查当前站立的鼠标指针的视觉是否允许丢弃行为。如果是这样,鼠标光标将被更改。

有很多解决方案。您可以在您的样式中使用EventTrigger并监听拖动事件,而不是让简单的Trigger监听IsMouseOver。另一种解决方案是拥有自己的财产。由于IsMouseOver只有一个getter,你可以创建自己的附加属性,允许在鼠标悬停或拖放时自行设置。您可以使用自己的属性而不是IsMouseOver。