使控件在拖放期间对拖动事件透明
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
设置为False
为TextBlock
。
【讨论】:
有效。我知道必须有一些简单的东西。以上是关于使控件在拖放期间对拖动事件透明的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UICollectionView 拖放期间删除“幽灵”单元格,并使移动单元格不透明?
C# 模拟 Windows 中的默认拖放功能(拖动过程中的透明图像)