我正在使用这个伟大的拖放框架:http://code.google.com/p/gong-wpf-dragdrop/我有两个列表框--A和B.当我从B拖动到A时,我希望鼠标光标在光标位于列表框A的区域内时立即改变 .
我几乎得到了它 . 通过使用IDropTarget接口,如下所示:
void IDropTarget.DragOver(DragOver drag)
{
drag.Effects = DragDropEffects.Copy | DragDropEffects.Move;
// some logic to determine if hovering over listbox A
// ...
if (hoveringOverListA)
{
ListBoxA.Cursor = ((FrameworkElement) Application.Current.Resources["ListboxACursor"]).Cursor;
}
}
唯一的问题是,当我拖动光标时显示的是不允许的操作(带有直线的黑色圆圈) . 一旦我释放鼠标,我就会看到我的ListboxACursor出现 . 所以这就像是一个延迟的反应,就像它在等待我拖拽而不是在我拖拽时这样做 .
如果有人能看到代码有什么问题,我将不胜感激 . 我觉得它可能与DragDropEffects有关,但它主要是预感 .
谢谢
2 回答
回答这个问题,因为它是谷歌的最高结果 .
应在拖动源上定义此方法 . 将事件标记为已处理并且不要调用
base.OnGiveFeedback
至关重要,因为执行任何操作都会导致默认拖动光标覆盖您的更改 .注意我是如何使用
Mouse.SetCursor
而不是更明显的FrameworkElement.Cursor
. 后者是拖动源元素的持久属性,您实际上不太可能想要更改这是因为Windows尝试使用自己的光标来确保默认外观 . 您可以通过明确禁用默认光标来避免这种情况 . 请参阅此tutorial中的GiveFeedback事件