我正在关注Bea Stollnitz的blog post关于在数据绑定ItemsControl上实现拖放操作。它工作得非常好,但我对任何经历类似事情的人都有疑问......
当我开始拖动项目时,鼠标底部有一个小的虚线矩形。我根本无法弄清楚如何隐藏那个矩形。有谁知道怎么摆脱这个?我会添加一个截图,但是当我进行打印屏幕时,矩形不会出现。
我认为这与添加了“DraggedAdorner”的AdornerLayer
上的焦点设置有关。
谢谢!
答案 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)
虚线矩形实际上是执行拖放“移动”操作时使用的默认光标的一部分。
通过覆盖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;
}