【问题标题】:Button control as ListView DataTemplate container wrt Drag-and-Drop of ListView Elements按钮控件作为 ListView DataTemplate 容器 wrt 拖放 ListView 元素
【发布时间】:2017-12-30 12:30:02
【问题描述】:

当我在 DataTemplate 中为 ListView(UWP 应用程序)使用 Button 控件时,ListView 项的拖放操作不起作用。如果我使用 StackPanel、RelativePanel 或 Grid 等容器,而不是 Button 控件,则一切正常。我更喜欢 Button 控件作为容器,因为我喜欢它在 ListView 项上的鼠标悬停效果。我可以为 StackPanel 等做类似的事情,通过使用样式和行为编程的组合来自定义悬停效果,但试图避免这条路线(太复杂了)。

我可以对 Button 控件做一些事情,以便它可以让我悬停并在 ListView DataTemplate 的一部分时响应 Drag-and-Drop 事件吗?

我也很好奇是什么让 Button 抑制了 ListView 项的拖放。

【问题讨论】:

  • 您应该考虑为自定义悬停效果重新设置列表视图项目的样式,而不是在此处使用按钮,这将吞噬您的所有手势,例如拖放。只需要确保测试虚拟化性能;或者,正如您已经知道的那样,在您的堆栈面板中进行自定义。
  • 我必须重新考虑这个选项。我开始重新设置列表视图的样式,虽然它拥有我需要的一切,包括悬停,但对于我需要的东西,它不像使用按钮控件之类的自定义容器(在列表视图项数组中实现不同的配置)那样灵活。感谢您的意见。

标签: xaml listview drag-and-drop uwp winrt-xaml


【解决方案1】:

Button 正在捕获导致指针单击事件不会冒泡到导致拖放开始的 ListViewItem 的指针。

您可以查看ReleasePointerCapture 方法,该方法将释放指针捕获,允许其他项目捕获它。

您将需要创建一个扩展默认 Button 类的新类并覆盖例如 OnPointerPressed 方法来选择拖放和单击按钮之间的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2012-12-12
    • 2011-09-26
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多