1

I want to prevent the ability to deselect a list view item if it is already selected. Therefore how do I prevent right mouse click ability to deselect an item?

I have prevented the ability to deselect via swiping by using IsSwipeEnabled="False" on the List View. I didn't require swipe ability on the list view.

I'm happy to completely prevent right mouse click on the list view items if needed.

4

2 回答 2

2

如果我正确阅读了您的问题,听起来您希望用户能够选择项目,但不能取消选择。如果是这样的话,这似乎是一个奇怪的要求——它违反了正常的 UI 约定,并且做了一些用户没有预料到的事情。

话虽如此,您可以通过处理ListView.

触发事件时,它会为您提供已删除(取消选择)项目的列表。然后,您只需将这些项目重新添加到 ListView 的选定项目列表中:

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

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


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

如果选择了不同的项目,我希望取消选择所选项目。但是我不想要的是(手动)取消选择已选择的项目

假设您有一个 select 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;
    }
}
于 2013-05-17T14:06:00.007 回答
1

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

您只需将 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。

于 2014-04-10T14:09:16.057 回答