如何在拖放时删除虚线矩形

时间:2012-11-27 15:36:32

标签: c# wpf drag-and-drop

我正在关注Bea Stollnitz的blog post关于在数据绑定ItemsControl上实现拖放操作。它工作得非常好,但我对任何经历类似事情的人都有疑问......

当我开始拖动项目时,鼠标底部有一个小的虚线矩形。我根本无法弄清楚如何隐藏那个矩形。有谁知道怎么摆脱这个?我会添加一个截图,但是当我进行打印屏幕时,矩形不会出现。

我认为这与添加了“DraggedAdorner”的AdornerLayer上的焦点设置有关。

谢谢!

2 个答案:

答案 0 :(得分:1)

在矩形所包围的Style的{​​{1}}中尝试此操作:

Visual

编辑:您看到的效果是<Setter Property="FocusVisualStyle" Value="{x:Null}"/> 作业的结果。您只需更改以下行(示例中的第168行)即可缓解此视觉效果:

DragDropEffects.Move

对此:

DragDropEffects effects = DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move);

因此将DragDropEffect设置为DragDropEffects.None

注意:在示例中,它会评估执行拖动和放大过程中的DragDropEffects effects = DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.None); 值。请放弃,因此您需要解决此问题(可能只是一个简单的DragDropEffects,甚至将AttachedProperty转换为Sender并使用FrameworkElement属性),但这应该解决 视觉 问题。

我希望这会有所帮助,如果我可以帮助您进一步让我知道。祝你好运!

答案 1 :(得分:0)

虚线矩形实际上是执行拖放“移动”操作时使用的默认光标的一部分。

这是默认的“移动”光标:
move cursor

这是默认的“复制”光标(如果在拖动时按住CTRL):
copy cursor

通过覆盖UIElement.OnGiveFeedback或订阅UIElement.GiveFeedback Routed Event,您可以更好地控制显示的鼠标光标。

在处理事件和更改光标时,请确保设置e.Handled = true;以防止光标闪烁。

例如,在启动拖动操作的元素上使用此替代(有关更多信息,请参见this walkthrough

protected override void OnGiveFeedback(GiveFeedbackEventArgs e)
{
    if (e.Effects.HasFlag(DragDropEffects.Copy))
    {
        Mouse.SetCursor(Cursors.Cross);
    }
    else if (e.Effects.HasFlag(DragDropEffects.Move))
    {
        Mouse.SetCursor(Cursors.Pen);
    }
    else
    {
        Mouse.SetCursor(Cursors.No);
    }

    e.Handled = true;
}