wpf - 在 WPF 中拖动时更改光标

标签 wpf drag-and-drop

我正在使用这个很棒的拖放框架:http://code.google.com/p/gong-wpf-dragdrop/ 我有两个列表框 - A 和 B。当我从 B 拖动到 A 时,我希望鼠标光标在光标位于列表框 A 的区域内时立即更改。

我快明白了。通过使用IDropTarget接口(interface)如下:

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 出现。所以这就像是一个延迟 react ,就像它在等待我放下,而不是在我 DragOver 时这样做。

如果有人能看出代码有什么问题,我将不胜感激。我有一种感觉,这可能与 DragDropEffects 有关,但这主要是一种预感。

最佳答案

回答这个问题是因为它是 Google 的最高结果。

protected override void OnGiveFeedback(System.Windows.GiveFeedbackEventArgs e)
{
    Mouse.SetCursor(Cursors.Hand);
    e.Handled = true;
}

此方法应在拖动源上定义。务必将事件标记为已处理,并且不要调用 base.OnGiveFeedback,因为这样做都会导致默认拖动光标覆盖您的更改。

请注意,我还使用了 Mouse.SetCursor,而不是更明显的 FrameworkElement.Cursor。后者是拖动源元素的持久属性,您不太可能真正想要更改

关于wpf - 在 WPF 中拖动时更改光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342463/

相关文章:

c# - 当 child 有错误时使 UserControl parent 无效

c# - MVVM、DialogService 和对话结果

c# - WPF - 在文本框旁边动态添加按钮

javascript - 将项目放在可排序区域上时如何删除可排序区域的文本?

android - 如何在android gridview上进行 ImageView 拖放

WPF数据可视化

c# - 对要分配给 Combobox 的列表进行排序

extjs - 如何在主面板中拖动面板

javascript - HTML5、JavaScript : Drag and Drop File from External Window (Windows Explorer)

python - Tkinter 拖放