【问题标题】:ListViewItem Drag&Drop Operation StuckListViewItem 拖放操作卡住
【发布时间】:2019-05-03 11:19:13
【问题描述】:

在普通UWP ListView中拖拽listviewitems时,有时会出现windows共享崩溃

在我决定关闭应用程序之前,该项目一直卡在那里(“正在用于共享弹出窗口”) - 事实上,Windows 资源管理器似乎不允许任何 拖放操作直到应用关闭!

从我的调试中我可以看到 DragEnter 被触发但没有 DragItemsCompleted

如何复制此问题

  1. 创建一个新的 UWP 应用

    • 目标API:1803
    • MinAPI:1803
  2. 创建一个列表视图

<ListView CanDragItems="True">
    <ListView.Items>
        <ListViewItem>asdf</ListViewItem>
        <ListViewItem>asdf</ListViewItem>
        <ListViewItem>asdf</ListViewItem>
        <ListViewItem>asdfEx</ListViewItem>
    </ListView.Items>
</ListView>
  1. 快速拖动项目并将其释放到列表视图顶部 3.1 有时会立即卡住,有时需要更多尝试

【问题讨论】:

  • 当我将 target 和 min 设置为 1803 时,我无法在 1809 上重现此问题。您的操作系统版本是多少?可以更新到1809测试吗?当我在 1803 工作并将目标设置为 1803 时,我不记得我有过这种问题。所以这可能是您设备上的特定问题?如果你有另一台设备,你介意也给它一个测试吗?

标签: c# uwp uwp-xaml


【解决方案1】:

可能的错误(没有看到更多代码..):你没有捕获鼠标,所以你的应用程序没有检测到你的 up 事件

mouse.capture

也许对于 UWP,请参阅 UIElement.CapturePointer

【讨论】:

  • 感谢您的回答 - 这是一个没有代码的新项目 - 唯一的修改是这个列表视图。
  • 从我看到的情况来看,按下退出键然后单击似乎会将共享重置回我可以拖放的位置,但我不能每次应用卡住时都要求我的用户这样做
  • 我不在 WIN10 中.. 我无法复制,但如果您在 dragenter 之后捕获鼠标,问题将得到解决,并且您在鼠标向上事件后释放鼠标
【解决方案2】:

这似乎是一个特定的 windows 1803 错误 - 按下退出似乎可以解锁 UI。

我在后面的代码中尝试过的任何东西似乎都不起作用......

【讨论】:

    【解决方案3】:

    我可能已经找到了答案(至少它现在对我有用)。我之前使用以下代码触发了DragStarting

    Private Async Sub brdPlayer_PointerPressed(sender As Object, e As PointerRoutedEventArgs)
        Await CType(sender, Border).StartDragAsync(e.GetCurrentPoint(CType(sender, Border)))
    End Sub
    

    但是,这导致DragStarting 被触发两次(可能还有其他东西),所以当我修改代码时添加:

    e.Handled = True
    

    我仍在测试其他方案,以确保这确实解决了整个问题,但希望它也能帮助你!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多