【问题标题】:How to simulate select behavior of LongListMultiSelector in a ListView on Windows Phone 8.1 Runtime如何在 Windows Phone 8.1 运行时的 ListView 中模拟 LongListMultiSelector 的选择行为
【发布时间】:2014-10-22 21:19:25
【问题描述】:

适用于 Windows Phone 8.0 的 Windows Phone 工具包有一个名为 LongListMultiSelector 的控件,它提供了一种非常酷的方式来选择项目。它将项目内容稍微向右移动,以便用户可以点击该区域以选择该项目。默认电子邮件应用程序具有我想要实现的确切行为。

我正在尝试在 Windows Phone 8.1 Windows 运行时应用程序中实现相同的行为,但很难完成。由于 LongListMultiSelector 继承自一个简单的 Control,我认为可以将其转换为 Windows Phone 8.1,但如果可以避免,我宁愿不这样做。

不管怎样,有没有人做过或者知道怎么做?

【问题讨论】:

    标签: windows-phone-8.1 longlistselector


    【解决方案1】:

    没有理由使用 CheckBox 来实现您的 DataTemplate。 ListView 已经支持多选模式,并且从 WinRT 和 Windows 8 开始支持。

    基本上,您需要做的就是将 SelectionMode 更改为多个,复选框将出现在左侧,就像您习惯使用 LongListMultiSelector 一样。

    假设您有一个像这样的虚拟 ListView,带有硬编码的项目,以保持简单:

    <ListView x:Name="ListViewMultiSelector" SelectionMode="None">
        <ListViewItem>Dog0</ListViewItem>
        <ListViewItem>Dog1</ListViewItem>
        <ListViewItem>Dog2</ListViewItem>
        <ListViewItem>Dog3</ListViewItem>
        <ListViewItem>Dog4</ListViewItem>
        <ListViewItem>Dog5</ListViewItem>
    </ListView>
    

    如果您在后面的代码中更改 SelectionMode(在某些事件、按钮单击、页面点击、滑动等)

    this.ListViewMultiSelector.SelectionMode = ListViewSelectionMode.Multiple;
    

    它将显示复选框。

    在 SelectionChanged 事件中(更准确地说是在 SelectionChangedEventArgs 中),您可以获得 AdditionalItems 和 RemovedItems,即一个对象列表 - IList。 AdditionalItems 包含可能触发了 SelectionChanged 的​​最新选中项,RemovedItems 包含可能触发了 SelectionChanged 的​​最新未选中项。

    【讨论】:

    • 我已经在这样做了。我希望 ListView 能提供一些东西来自动触发多选模式。我想我只是太懒了。不过感谢您的好回答。
    • 那么,有没有办法完全模拟LongListMultiSelector(即点击项目左侧进入多选模式,点击项目左侧出现特征色条)?
    • @konikos 你找到方法了吗?
    • @Benjamin Diele 不幸的是,没有。也许这属于另一个问题?
    【解决方案2】:

    @konikos,@Benjamin Diele

    这在 XAML 中

     <ListView  SelectionMode="Single" SelectionChanged="ListMovimentos_OnSelectionChanged" Padding="0 0 0 40" ItemsSource="{Binding ListMovimentos}" ItemContainerStyle="{StaticResource ListItemsContainerGeneric}"  x:Name="ListMovimentos"></ListView>
    

    这在后面的代码中

      private void ListMovimentos_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if (ListMovimentos.SelectedItems.Count > 0)
                {
                    ListMovimentos.SelectionMode = ListViewSelectionMode.Multiple;
                }
                else
                {
                    ListMovimentos.SelectionMode = ListViewSelectionMode.Single;
                }
            }
    

    帮我搞定了,得到了像 Windows Phone LongListMultiSelector 这样的动画。

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多