【问题标题】:Custom SelectionMode for GridView. Select only on right clickGridView 的自定义 SelectionMode。仅在右键单击时选择
【发布时间】:2013-06-09 15:50:33
【问题描述】:

我正在尝试在我的 Windows 8 应用程序中为 GridView 实现一些复杂的选择行为。我知道这是可能的,因为 Windows Store 中的 OneNote 应用程序实现了与我想要的完全相同的行为。这是我想要的行为:

  • 如果我左键单击该项目,则只会触发 ItemTapped 事件。不应选择项目。这与SelectionMode="None" 完全相同。当在触摸屏设备上点击项目时,预期会有相同的行为。
  • 如果我右键单击,我应该能够选择多个项目 - 就像SelectionMode="Multiple"。当用户通过滑动和拉动来选择一个项目时,也会发生类似的事情。如果我再次左键单击一个项目,则所有选定的项目都应该被取消选择并且 ItemTapped 应该触发。

简而言之,左键单击和项目点击应表现为SelectionMode="None",而右键单击和滑动选择应表现为SelectionMode="Multiple"

【问题讨论】:

    标签: c# xaml windows-8 microsoft-metro windows-store-apps


    【解决方案1】:

    我认为您可以通过首先启用多项选择以及启用滑动手势来实现您想要的。然后左键单击(在点击的处理程序中),您可以取消选择代码中的所有项目。

    Xaml GridView 选项 - 这允许右键单击和触摸(滑动)选择:

    SelectionMode="Multiple"
    IsSwipeEnabled="True"
    Tapped="itemGridView_Tapped"
    

    这是点击事件的代码 - 在左键单击或点击时,这会取消选择任何选定的项目:

    private void itemGridView_Tapped(object sender, TappedRoutedEventArgs e)
    {
        while (itemGridView.SelectedItems.Count > 0)
            itemGridView.SelectedItems.RemoveAt(0);
    }
    

    【讨论】:

    • 我在另一个 GridView 中嵌入了 GridView。 (是的,我知道使用分组GridView 可以达到类似的效果,但我需要进行一些拖放操作!)所以,我必须通过执行“sender as GridView”来识别GridView。有用!你的摇滚!
    • 为什么使用while循环而不是ICollection<T>.Clear方法来删除选中的项目?
    • @Stefan 没有具体原因,你的建议也可以。
    猜你喜欢
    • 2017-12-02
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多