首页 > 解决方案 > 在 MS Office 应用程序中打开浮出控件时按下键/字母时如何触发浮出控件菜单项?

问题描述

当用户右键单击一个项目以显示上下文菜单时,我希望他们能够在键盘上按下一个键(即使没有修饰符)来激活某些菜单(如在 Office 应用程序中)。

我查看了访问键和键盘加速器,但它们似乎不是正确的 API,因为它们需要保留一个修饰符。

谢谢你。

标签: c#xamluwp

解决方案


您可以在打开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="&#xE72D;"/>
                </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
    }
}

推荐阅读