【问题标题】:How to remove dashed rectangle when doing drag and drop拖放时如何删除虚线矩形
【发布时间】:2012-11-27 15:36:32
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: c# wpf drag-and-drop


    【解决方案1】:

    在被矩形包围的Visual 的Style 中试试这个:

    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    

    编辑:您看到的效果是DragDropEffects.Move 分配的结果。您可以通过简单地更改以下行(示例中的第 168 行)来缓解这种视觉效果:

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

    到这里:

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

    因此将 DragDropEffect 设置为 DragDropEffects.None

    注意:在示例中,它在执行拖放过程中评估 DragDropEffects 值,因此您需要解决此问题(可能是一个简单的 AttachedProperty,甚至将 Sender 转换为FrameworkElement 并使用 Tag 属性),但这应该可以解决 visual 问题。

    我希望这会有所帮助,如果我能进一步帮助您,请随时告诉我。祝你好运!

    【讨论】:

    • 假设我将它添加到正确的位置,它没有工作。在继承自Adorner 的类中,我在装饰层和装饰器本身上都将FocusVisualStyle 设置为NULL,但都不起作用。
    • 嗯。查看图像会很有帮助,但我设想它类似于大多数 FrameworkElements 默认具有的焦点视觉样式。也许它根本不在 AdornerLayer 中?您在什么类型的视觉对象上看到了这种行为?
    • 我有一个 DataTemplate(里面有一个 TextBlock),它被分配给 Adorner 内的 ContentPresenter 的 ContentTemplate。
    • 你有没有用 Snoop 找出哪个元素负责大纲?
    • 我没有...我试试看。
    【解决方案2】:

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

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

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

    您可以通过覆盖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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      相关资源
      最近更新 更多