在Wpf中拖动时,如何改变鼠标光标(或者使用装饰器)以指示droptarget不接受拖动的项?我尝试在DragEnter事件期间设置e.Effects = DragDropEffects.None,但这不起作用,我怀疑我误解了该功能的用途。我尝试使用GiveFeedback事件,但看不出droptarget如何影响它。
droptarget
DragEnter
e.Effects = DragDropEffects.None
GiveFeedback
k7fdbhmy1#
只要在拖放目标的DragEnter中设置DragDropEffects就可以了。是否调用了DragEnter。是否在拖放目标控件上设置了AllowDrop?这是WPF中拖放过程中的事件序列(摘自MSDN),它可能有助于了解发生了什么...1.拖曳是借由呼叫原始档控制的DoDragDrop方法来起始。DoDragDrop方法采用两个参数:* data,指定要传递的数据 * allowedEffects,指定允许哪些操作(复制和/或移动)将自动创建一个新的DataObject对象。1.这会引发GiveFeedback事件。在大多数情况下,您不需要担心GiveFeedback事件,但如果您希望在拖动过程中显示自定义鼠标指针,则需要在此处添加代码。1.任何AllowDrop属性设置为True的控件都是潜在的放置目标。AllowDrop属性可以在设计时在“属性”窗口中设置,也可以在Form_Load事件中以编程方式设置。1.当鼠标经过每个控件时,将引发该控件的DragEnter事件。GetDataPresent方法用于确保数据的格式适合于目标控件,Effect属性用于显示适当的鼠标指针。1.如果使用者在有效的置放目的上放开鼠标器按钮,就会引发DragDrop事件。DragDrop事件行程常式中的程式码会从DataObject对象撷取数据,并将数据显示在目的控件中。
7uzetpgm2#
我遇到了类似的问题,因为我在GiveFeedback处理程序中更改了光标。即使放置目标拒绝数据,也会使用此光标。切换回默认光标(例如,UseDefaultCursors = true)后,光标形状确实正确地更改为“不允许”。
elcex8rz3#
你没有说你是否使用了DragOver even,也许你在这个even里设置了e.Effect = DragDropEffects.All;,进入目标控件后会反复触发,而不是DragEnter只触发一次。
DragOver
e.Effect = DragDropEffects.All;
private void arbol_DragOver(object sender, DragEventArgs e) { if (some_reason) e.Effect = DragDropEffects.None; else e.Effect = DragDropEffects.All; }
如果你没有使用这个事件或者没有在里面修改e.Effect,那就很难说了。
e.Effect
mf98qq944#
如果您希望应用程序接受您在帐户中所做的更改,则应将Handled属性设置为true:
private void OnDragOver(object sender, DragEventArgs e) { if (your_test) e.Effects = DragDropEffects.Link;//or other effect you want else e.Effects = DragDropEffects.None; e.Handled = true; }
4条答案
按热度按时间k7fdbhmy1#
只要在拖放目标的DragEnter中设置DragDropEffects就可以了。是否调用了DragEnter。是否在拖放目标控件上设置了AllowDrop?
这是WPF中拖放过程中的事件序列(摘自MSDN),它可能有助于了解发生了什么...
1.拖曳是借由呼叫原始档控制的DoDragDrop方法来起始。
DoDragDrop方法采用两个参数:* data,指定要传递的数据 * allowedEffects,指定允许哪些操作(复制和/或移动)
将自动创建一个新的DataObject对象。
1.这会引发GiveFeedback事件。在大多数情况下,您不需要担心GiveFeedback事件,但如果您希望在拖动过程中显示自定义鼠标指针,则需要在此处添加代码。
1.任何AllowDrop属性设置为True的控件都是潜在的放置目标。AllowDrop属性可以在设计时在“属性”窗口中设置,也可以在Form_Load事件中以编程方式设置。
1.当鼠标经过每个控件时,将引发该控件的DragEnter事件。GetDataPresent方法用于确保数据的格式适合于目标控件,Effect属性用于显示适当的鼠标指针。
1.如果使用者在有效的置放目的上放开鼠标器按钮,就会引发DragDrop事件。DragDrop事件行程常式中的程式码会从DataObject对象撷取数据,并将数据显示在目的控件中。
7uzetpgm2#
我遇到了类似的问题,因为我在GiveFeedback处理程序中更改了光标。即使放置目标拒绝数据,也会使用此光标。切换回默认光标(例如,UseDefaultCursors = true)后,光标形状确实正确地更改为“不允许”。
elcex8rz3#
你没有说你是否使用了
DragOver
even,也许你在这个even里设置了e.Effect = DragDropEffects.All;
,进入目标控件后会反复触发,而不是DragEnter
只触发一次。如果你没有使用这个事件或者没有在里面修改
e.Effect
,那就很难说了。mf98qq944#
如果您希望应用程序接受您在帐户中所做的更改,则应将Handled属性设置为true: