我正在尝试在 WPF 中处理 拖放。当用户掉落到窗口外时,我的应用程序将进行处理。
问题是,即使我这样做了
e.Action = DragAction.Cancel
,QueryContinuedrag
事件仍然会被调用。
我的代码:
private void _tabControl_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
if (Mouse.LeftButton == MouseButtonState.Released)
{
e.Action = DragAction.Cancel;
this.Cursor = Cursors.Arrow;
System.Diagnostics.Debug.WriteLine("debug");
//Handle
}
else
{
e.Action = DragAction.Continue;
this.Cursor = Cursors.Hand;
}
}
结果
我真的必须取消吗?或者有没有办法让我捕捉到 Cancel Drag 事件?希望有帮助。
您应该处理
UIElement.PreviewQueryContinueDrag
(UIElement.QueryContinueDrag
事件的隧道版本),并将该事件标记为已处理,以防止冒泡版本执行默认的UIElement
实现..
一些冒泡事件主要由处理控件处理,需要处理隧道版本才能覆盖默认行为。
ctor()
{
this.PreviewQueryContinueDrag += TabControl_QueryContinueDrag;
}
private void TabControl_PreviewQueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
if (Mouse.LeftButton == MouseButtonState.Released)
{
e.Action = DragAction.Cancel;
e.Handled = true;
this.Cursor = Cursors.Arrow;
System.Diagnostics.Debug.WriteLine("debug");
//Handle
}
else
{
e.Action = DragAction.Continue;
this.Cursor = Cursors.Hand;
}
}