【问题标题】:Reordering in Windows Phone 8.1 ListView在 Windows Phone 8.1 ListView 中重新排序
【发布时间】:2015-03-14 21:41:16
【问题描述】:

我有一个 Windows Phone 8.1 ListView。我想重新排序ListView中的项目。我想在长按上启动重新排序模式,我可以通过点击项目Holding事件并将ListViews ReorderMode更改为Enabled来管理它. ListView 看起来像这样

1.有没有办法“选择”并准备好拖动项目?所以ListView 看起来像这样?我找不到任何属性或任何使其“被选中”的东西。让用户选择他启动重新订购的项目会更好。

2。有没有办法知道用户将项目放到另一个地方(是否重新排序)?我想我可以通过使用 ListView 上的 DragOverDragLeaving 事件来完成它,但是当它们被触发时重新排序模式被禁用,而不是在项目被放到另一个位置时。

3.有没有办法使重新排序模式下的项目之间的差距更小?我找到了 ListViewItemReorderHintThemeOffset 资源,但更改它(直接或编辑 ListViewItem 的样式)不会产生任何变化。

【问题讨论】:

  • 至于 2. - 也许你可以尝试利用 ListView.Items.VectorChanged 事件 - 一旦用户重新排序任何项目,该事件被触发两次,一次用于删除,一次用于插入。

标签: c# xaml windows-phone-8.1 win-universal-app


【解决方案1】:

1 和 2:

您需要捕获ListItem的PointerPressed事件,或者在ItemTemplate的DataTemplate中。

然后将 ReorderMode 设置为 Enabled :

        if (ListView != null && ListView.ReorderMode != ListViewReorderMode.Enabled)
        {
            ListView.ReorderMode = ListViewReorderMode.Enabled;
        }

【讨论】:

  • 这可能适用于 2,但我确信它不适用于 1,我没有看到任何将点击项目设置为前台的代码。
  • @IgorKulman 我去过那里,这不能开箱即用。 ReorderModeBehavior 在选定的 ListItem 的上下文中执行,您可以在 Behavior 上创建一个依赖属性(如 ListView 依赖属性)并让数据上下文知道已选择的项目。我认为这可能有效:)
  • 是的,1 与 repo 配合得很好,谢谢,我想我可以使用关于 ListView.Items.VectorChanged 的评论来实现 2,或者你有什么更好的主意吗?
  • 我会处理 ViewModel 上的 CollectionChanged 事件,但如果您在 UI 中需要它。使用 VectorChanged 可能会更好。
  • ListViewItemReorderHintThemeOffset 不会解决问题,因为它仅适用于 HintStates。我想您需要创建自己的 DropTargetItemThemeAnimation。
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多