Я создал настраиваемый элемент управления панели инструментов WPF. Я реализовал функцию перетаскивания, которая работает должным образом, но когда я перемещаю мышь (перетаскивая данные) над целью перетаскивания, курсор мыши отображается так, как будто это действие не может быть выполнено, хотя код выполняется и работает правильно. (здесь вы можете видеть, как выглядит курсор при перетаскивании над целью). Я пробовал следующее в целевом OnDragEvent:
Mouse.OverrideCursor = Cursors.Hand; в этом случае курсор изменяется только примерно на 1/1000 секунды, а затем возвращается к тому, который можно увидеть на изображении выше.Cursor.Current = Cursors.Hand;, который тоже не работает.Да, это так.
Не могли бы вы поделиться фрагментами кода, в которых вы обрабатываете механику перетаскивания? Также в тех частях, где вы пытались установить курсор вручную?
В другом комментарии вы сказали, что обертываете весь элемент управления. Ваша оболочка тоже определяет свойство AllowDrop? Если да, не могли бы вы показать нам иерархию контроля? Нравится Form(Panel(...))? Как и когда «сбрасывать» курсор? Вы устанавливаете его в других вызовах методов?
Я забыл установить для свойства allowdrop значение true для оболочки. Я установил его сейчас, но он все тот же. Иерархия следующая: UserControl (DockPanel (Grid (StackPanel (ContentControl)))) ContentControls содержит элемент управления ActiveX. Хорошо. Я еще не пробовал «сбрасывать» курсор, так как он на самом деле не меняется.





Вы использовали DoDragDrop?
Там вы можете установить Эффект в качестве третьего параметра:
DragDrop.DoDragDrop(drg, dragData, DragDropEffects.Move);
Я действительно использовал DoDragDrop. Кроме того, я установил третий параметр точно так же, как вы сказали, и он все тот же.
Может это поможет: У меня есть два холста, один из которых держит кнопку:
<Canvas
HorizontalAlignment = "Left"
Height = "225"
Margin = "270,10,0,0"
VerticalAlignment = "Top"
Width = "237"
PreviewMouseMove = "Canvas_PreviewMouseMove">
<Button
Content = "Button"
Canvas.Left = "65"
Canvas.Top = "65"
Width = "75"/>
</Canvas>
<Canvas
HorizontalAlignment = "Left"
Height = "225"
Margin = "20,10,0,0"
VerticalAlignment = "Top"
Width = "245"
AllowDrop = "True"
Background = "Black"
/>
и это в PreviewMouseEvent:
private static readonly string ident = "test";
private void Canvas_PreviewMouseMove(object sender, MouseEventArgs e)
{
DataObject dragData = new DataObject(ident, ((Canvas)sender));
DragDrop.DoDragDrop((Canvas)sender, dragData, DragDropEffects.Move);
}
Здесь вы получаете эффект перемещения при установке цвета фона, если цвет не установлен, вы не получите эффекта перемещения. Может это твоя проблема. (Такое же поведение для UserControls)
У меня уже была такая проблема. События не запускались для всего элемента управления, поэтому мне пришлось обернуть его и установить прозрачный фон оболочки. Это решило проблему события, но, к сожалению, это не решение моей новой проблемы.
Позаботьтесь о том, чтобы реализовать некоторые события в случае перетаскивания. Я советую увидеть следующую ссылку. Я думаю, что это будет полезно и решит вашу проблему.
перетащить усилитель падение в WPF объяснил до конца
Помогло изменение курсора в GiveFeedbackEvent. Большое спасибо!
Указывает ли ваша форма / панель / элемент управления (все, что на скриншоте в фоновом режиме)
AllowDrop=true?