【发布时间】:2020-11-02 19:08:05
【问题描述】:
在这个问题UWP: how to get the RightTapped GridView Item 中,有一种方法可以在GridView中获取“右键单击”项(在UWP中,GridView与ListView几乎相同):
var student = (e.OriginalSource as FrameworkElement)?.DataContext as Student;
?. 符号很有趣,因为当您使用鼠标右键单击 on 一个项目时,就可以了。但是当您使用菜单按钮 (https://en.wikipedia.org/wiki/Menu_key) 或使用 Xbox 控制器上的菜单按钮“右键点击”项目时,这是 NOT 好的,因为该值为 null(实际上 OriginalSource 的类型是 GridViewItem )。
虽然我找到了解决办法:
- 使用
(((GridViewItem)e.OriginalSource).Content as YOUR_ITEM_DATA_TYPE)处理菜单按钮 - 使用
(e.OriginalSource as FrameworkElement)?.DataContext as YOUR_ITEM_DATA_TYPE处理鼠标右键
typeof(e.OriginalSource) 可以与 if...else... 一起使用以选择要使用的解决方案。
但这真的是最好的解决方案吗?微软设计了 UWP,并表示它已针对鼠标、键盘、Xbox 控制器等游戏手柄甚至眼动仪进行了优化。那么有没有更好的方法来处理“上下文菜单”(https://docs.microsoft.com/en-us/windows/uwp/design/input/gamepad-and-remote-interactions#accelerator-support)动作?
我的目标:
-
左键单击一个项目→对项目列表做一些事情[点击索引]
-
右键单击项目→打开编辑、删除等菜单→单击编辑→ 对 itemlist[右键单击索引] 做一些事情
PS:在 Windows 10 中尝试“设置”,使用鼠标、键盘或 Xbox 控制器“右键单击”项目(在开始菜单中固定磁贴)效果很好
【问题讨论】: