如何在列表视图项(ListViewItem)上禁用右键选择



我想防止在列表视图项已被选中时取消选中的功能。因此,我如何防止鼠标右键取消选择项目的能力?

我已经阻止了通过在列表视图上使用IsSwipeEnabled="False"通过滑动来取消选择的能力。我不需要在列表视图上滑动。

我很高兴完全防止鼠标右键点击列表视图项目,如果需要。

如果我正确理解了你的问题,听起来你想让用户能够选择项目,但不能取消选择。如果是这样的话,这似乎是一个奇怪的需求——它违背了正常的UI约定,并且做了一些用户意想不到的事情。

话虽如此,您可以通过处理ListView中的SelectionChanged事件来做到这一点。

当事件被触发时,它会给您一个删除(取消选择)项目的列表。然后你只需要将这些项目添加回ListView的selected items列表中:

private void itemListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (var item in e.RemovedItems)
    {
        itemListView.SelectedItems.Add(item);
    }
}

请注意,如果使用上述代码,则不必处理任何滑动或鼠标事件。


编辑 -根据OP的评论,要求与我的想法略有不同:

如果选择了不同的项,我希望所选项取消选择。然而,我不想要的是一个已经选择的项目被(手动)取消选择

假设你有一个单一的选择ListView,你仍然可以使用SelectionChanged事件和SelectionChangedEventArgs做你所要求的:

private void itemListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.RemovedItems.Count > 0 && e.AddedItems.Count == 0)
    {
        var removed = e.RemovedItems[0];
        itemListView.SelectedItem = removed;
    }
}

我在下面的论坛上找到了一个简单的解决方案。

你只需要添加一个right ttapping事件到listviewdatatemplate内容。

<ListView>
   <ListView.ItemTemplate>
       <DataTemplate>
         <ContentPresenter RightTapped="daves_RightTapped" />
       </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

然后在后面的代码中:

private void daves_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e)
    {
        e.Handled = true;
    }

最新更新