I'm using this great drag/drop framework: http://code.google.com/p/gong-wpf-dragdrop/ I have two listboxes - A and B. When I drag from B to A, I want the mouse cursor to change as soon as the cursor is within the area of listbox A.
I've almost got it. By using the IDropTarget interface as follows:
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;
}
}
The only problem is, while I'm dragging over the cursor that shows is the the operation not allowed one (the black circle with the line through it). As soon as I release the mouse, then I see my ListboxACursor appear. So it's like it's a delayed reaction, like it's waiting for me to Drop instead of doing it while I'm DragOver'ing.
If anyone can see what is wrong with the code, I would greatly appreciate it. I have a feeling it might be to do with the DragDropEffects but it's mainly a hunch.
Answering this question because it's the top Google result.
protected override void OnGiveFeedback(System.Windows.GiveFeedbackEventArgs e)
{
Mouse.SetCursor(Cursors.Hand);
e.Handled = true;
}
This method should be defined on the drag source. It's critical that you flag the event as handled and that you DO NOT call base.OnGiveFeedback
, as doing either will result in the default drag cursor overriding your changes.
Notice how I'm also using Mouse.SetCursor
instead of the more obvious FrameworkElement.Cursor
. The latter is a persistent property of the drag source element, and it's unlikely that you actually want to change
That is because Windows tries to use its own cursor to ensure a default look&feel. You can avoid this by explicitely disabling the default cursor. See GiveFeedback event in this tutorial
private void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
e.UseDefaultCursors = e.Effect != DragDropEffects.Copy;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With