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

时间:2013-05-17 09:47:57

标签: xaml windows-8 windows-runtime

我想阻止取消选择列表视图项(如果已选中)的功能。因此,如何防止鼠标右键单击取消选择项目?

我已阻止使用列表视图上的IsSwipeEnabled="False"通过滑动取消选择的功能。我没有要求列表视图上的滑动功能。

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

2 个答案:

答案 0 :(得分:2)

如果我正确地阅读您的问题,听起来您希望用户能够选择项目,但无法取消选择。如果是这种情况,它似乎是一个奇怪的要求 - 它违反了普通的UI惯例,并做了用户不期望的事情。

话虽如此,您可以通过处理ListView中的SelectionChanged事件来实现此目的。

触发事件时,它会显示已删除(取消选中)的项目列表。然后,您只需将这些项目添加回ListView的选定项目列表中:

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;
    }
}

答案 1 :(得分:1)

我在以下forum找到了一个简单的解决方案。

您只需将RightTapped事件添加到ListView DataTemplate内容。

<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;
    }

这适用于Outlook样式ListView。