c# - 在 MS Office 应用程序中打开浮出控件时按下键/字母时如何触发浮出控件菜单项?
问题描述
当用户右键单击一个项目以显示上下文菜单时,我希望他们能够在键盘上按下一个键(即使没有修饰符)来激活某些菜单(如在 Office 应用程序中)。
我查看了访问键和键盘加速器,但它们似乎不是正确的 API,因为它们需要保留一个修饰符。
谢谢你。
解决方案
您可以在打开PreviewKeyDown
时将事件处理程序添加到当前窗口内容MenuFlyout
。特定按下PreviewKeyDown
时在事件处理程序中调用匹配方法。VirtualKey
然后PreviewKeyDown
在 MenuFlyout 关闭时移除事件处理程序以避免错误触发。
<Button Content="Edit Options" HorizontalAlignment="Left">
<Button.Flyout >
<MenuFlyout Opened="MenuFlyout_Opened" Closed="MenuFlyout_Closed" >
<MenuFlyoutItem Text="Share">
<MenuFlyoutItem.Icon>
<FontIcon Glyph=""/>
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
<MenuFlyoutItem Text="Copy"/>
<MenuFlyoutItem Text="Delete"/>
<MenuFlyoutSeparator/>
<MenuFlyoutItem Text="Rename"/>
<MenuFlyoutItem Text="Select"/>
</MenuFlyout>
</Button.Flyout>
</Button>
背后的代码
private void MenuFlyout_Opened(object sender, object e)
{
Window.Current.Content.PreviewKeyDown += Content_PreviewKeyDown;
}
private void MenuFlyout_Closed(object sender, object e)
{
Window.Current.Content.PreviewKeyDown -= Content_PreviewKeyDown;
}
private void Content_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if(e.Key == VirtualKey.D)
{
//delete current item
}
}
推荐阅读
- javascript - 升级到 Big Sur 后开玩笑测试错误
- php - 目标类 [] 不存在。在 Laravel
- vba - 使用 ppLayoutCustom 在 VBA 中将空白幻灯片添加到 PowerPoint
- mongodb - 看不到关系 - Loopback 4 + MongoDB + openapi-to-graphql
- python - 如何从我的类别类型列中删除 NaN 值?我用过 .dropna 但它不起作用
- r - 如何在 R 的欧拉图中使图例水平?
- python - 最近安装了 python 3.8,我正在尝试使用空闲安装 py -3 -m pip install -U discord.py
- flutter - 颤动中的省略号没有按预期工作
- java - 具有可配置通信方式的 Spring Boot 微服务
- android - BindingAdapter 未按预期工作