拖动某些东西时如何在 UIElement 周围显示一个简单的边框

Posted

技术标签:

【中文标题】拖动某些东西时如何在 UIElement 周围显示一个简单的边框【英文标题】:How do I show a simple border around a UIElement when something is being dragged over 【发布时间】:2014-10-24 11:33:15 【问题描述】:

我有一个 UIElement,用户可以在上面拖放东西。我在网上浏览了几篇关于如何在 WPF 中进行拖放的文章,但它们非常复杂,其中大多数都设计为与 Drag Source 一起使用,需要一些画布来在源被拖动时绘制装饰图像和要求将行为附加在 Source 级别。

我的问题有点不同,我有一个放置目标,但我不知道源在哪里。我所要做的就是,当拖动某些东西时,在我的 UIElement 周围显示矩形或边框。

我尝试处理 UIElement.DragEnter 并更改了 BorderBrush 和 Thickness 但没有帮助。

有什么简单的方法吗?

【问题讨论】:

【参考方案1】:

看看这个小例子。当我回答你的问题时,这就是你想要做的?

UIElement(在本例中为列表框)将 AllowDrop 属性设置为 true(完全需要接收拖动事件)。 在 DragEnter 事件中,我将厚度设置为 10,在 dragleave 中设置为零。 它按预期工作(我尝试在其上拖动桌面图标)

<ListBox AllowDrop="True" Name="MBox" BorderBrush="Red" BorderThickness="0"  DragEnter="MBox_OnDragEnter" DragLeave="MBox_OnDragLeave"></ListBox>
private void MBox_OnDragEnter(object sender, DragEventArgs e)

    MBox.BorderThickness = new Thickness(10);


private void MBox_OnDragLeave(object sender, DragEventArgs e)

    MBox.BorderThickness = new Thickness(0);

如果此答案不符合您的需求,请显示您的无效代码。也许这将有助于找到问题。

【讨论】:

您的代码有效。原来问题出在我丢东西的 UIElement 上。是 DevExpress 的 TextEdit 抑制了边框,我不得不使用效果。 啊好吧!是的,有时这样的自定义控件有点棘手。如果您将答案标记为已接受,如果它对您有帮助,那就太好了:)

以上是关于拖动某些东西时如何在 UIElement 周围显示一个简单的边框的主要内容,如果未能解决你的问题,请参考以下文章

我想从 Silverlight UIElement 中拖动图像并将其放在用户桌面或 Windows 资源管理器上

IOS/Xcode:故事板屏幕变黑

Qt - 如何在拖动项目时显示图像/图标/数据?

在 Chrome 开发人员工具中,如何禁用刷新元素周围的突出显示?

C# 在面板周围拖动控件

尝试使用 JLayeredPane 拖动某些东西