【问题标题】:Why does drag and drop prevent UIElement.IsMouseOver From returning correctly?为什么拖放会阻止 UIElement.IsMouseOver 正确返回?
【发布时间】:2014-01-16 21:08:39
【问题描述】:

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

所以我为列表视图启用了拖放功能,但我注意到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 以通过拖放操作

【问题讨论】:

    标签: wpf xaml drag-and-drop


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多