【问题标题】:ListView select and deselect on click (no Ctrl + click needed)ListView 在单击时选择和取消选择(无需 Ctrl + 单击)
【发布时间】:2016-04-14 04:52:46
【问题描述】:

UWP 中的普通 ListView(使用 SelectionMode="Single")在您单击时选择项目,并在您按住 Ctrl 并单击时取消选择项目。

我想更改取消选择功能,以便您无需按 Ctrl 即可取消选择项目。只需再次单击所选项目即可删除选择。

似乎在设置 SelectionMode="Multiple" 时,再次单击项目会像我想要的那样取消选择它,但我不想选择多个项目。

更新

这就是我现在的做法。所以我正在监听 SelectionChanged 事件,当事件被触发时,我会从 ListView selectedItem 属性中获取所选项目。

<ListView ItemsSource="{x:Bind ViewModel.Cars}" SelectedItem="{Binding SelectedCar, Mode=TwoWay}" SelectionMode="Single">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="SelectionChanged">
            <core:InvokeCommandAction Command="{Binding CarSelectedCommand}" />
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="model:ICar">
            <StackPanel>
                <TextBlock Text="{x:Bind Name}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

【问题讨论】:

  • 我在这里找到了答案,stackoverflow.com/questions/34458244/…。很好奇,因为我没有那个 ctrl-click 用来取消选择
  • 添加了质疑我现在做得如何的例子。根据您的链接,也许我需要尝试使用 ItemClick 事件来做到这一点?

标签: c# xaml listview windows-10 uwp


【解决方案1】:

在列表视图中启用 IsItemClickEnabled。当它被触发时,检查单击的项目是否已被选中并取消选择它。我已经测试过了,点击事件发生在选择之前,所以你应该没问题。

【讨论】:

    【解决方案2】:

    设置多个SelectionMode并隐藏选择复选框

    <ListView SelectionMode="Multiple" IsMultiSelectCheckBoxEnabled="False" SelectionChanged="_listView_SelectionChanged" >
    

    每次选择都会引发此事件两次

    Item prevSelection = null;
        private void _listView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Item selected = null;
            foreach (var item in e.AddedItems)
            {
                selected = item as Item;
            }
            if (selected != null && selected != prevSelection)
            {
                prevSelection = selected;
                _listView.DeselectRange(new ItemIndexRange(0, (uint)_collection.Count));
                _listView.SelectedItem = selected; //will rise event again
                selected = prevSelection = null;
            }
        }
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,但在 WPF 中。该解决方案也可以兼容 UWP。

      XAML:

      <ListView SelectionMode="Multiple" SelectionChanged="_ListViewSelectionChanged">
      

      C#:

      private void _ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
      {
          var listView = (ListView)sender;
          if (e.AddedItems.Count > 0 && listView.SelectedItem != e.AddedItems[0])
              listView.SelectedItem = e.AddedItems[0];
      }
      

      Multiple 选择模式已经在单击时取消选择选定的项目,您只需要担心如果选择了不同的项目就会取消选择它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多