尽管被取消,QueryContinueDrag 仍然被调用

问题描述 投票:0回答:1

我正在尝试在 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 事件?希望有帮助。

wpf drag-and-drop
1个回答
0
投票

您应该处理

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;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.