当用户右键单击一个项目以显示上下文菜单时,我希望他们能够仅在键盘上按下一个键(即使没有修饰符)来激活某些菜单(例如在Office应用程序中)。
我看过访问键和键盘加速器,但是它们似乎不是正确的API,因为它们需要保留一个修饰符。
谢谢。
答案 0 :(得分:1)
打开PreviewKeyDown
时,可以将MenuFlyout
事件处理程序添加到当前窗口内容中。按下特定的PreviewKeyDown
时,在VirtualKey
事件处理程序中调用匹配方法。然后在MenuFlyout关闭时删除PreviewKeyDown
事件处理程序,以避免错误触发。
<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
}
}