使控件在拖放期间对拖动事件透明

Posted

技术标签:

【中文标题】使控件在拖放期间对拖动事件透明【英文标题】:Make control transparent to drag events during drag-and-drop 【发布时间】:2015-10-15 06:44:02 【问题描述】:

我有一个ListView,它充当拖放操作的放置目标。当列表为空时,我在其顶部放置一个TextBlock,并带有一条消息,通知用户他们可以将东西拖到那里(两个控件都包含在一个Grid 单元格中以启用重叠)。但是...由于TextBlock 位于ListView 之上,它会拦截与拖放相关的各种事件,并防止将内容拖放到消息文本本身上。

我真的不想在TextBlock 中添加拖放处理程序——有什么方法可以简单地使其对拖放操作“透明”吗?

在写这篇文章时我刚刚想到的事情是把文本按 Z 顺序放在列表下方,然后给列表一个透明背景。但这真的是实现这一目标的正确方法吗?理想情况下,有一种方法可以为文本提供一个 ZIndex 用于呈现,而另一个用于命中测试。

【问题讨论】:

只需使用 ListView 的 PreviewDragEnter/Drop 事件处理程序,以便在 TextBlock 之前获得通知。 @HansPassant 问题的根源是当光标移到文本上时 ListView 获取 PreviewDragLeave,而我使用的拖放框架通过将拖动效果设置为无来处理该问题,这告诉 Windows 不允许丢弃。我有框架的源代码,所以我可以改变这种行为,但我不想这样做。 【参考方案1】:

IsHitTestVisible 设置为FalseTextBlock

【讨论】:

有效。我知道必须有一些简单的东西。

以上是关于使控件在拖放期间对拖动事件透明的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UICollectionView 拖放期间删除“幽灵”单元格,并使移动单元格不透明?

C# 模拟 Windows 中的默认拖放功能(拖动过程中的透明图像)

在拖放期间在 NSTableView 中打开一个间隙

有没有办法使控件对 WPF 中的鼠标事件透明?

如何使可拖动元素在拖放时保持在新位置(HTML5 不是 jQuery)?

UITableView - 如何在拖放期间更改单元格的背景颜色?