繁体   English   中英

在弹出窗口打开时(如在MS Office应用程序中)按下键/字母时,如何触发弹出菜单项?

[英]How do I trigger flyout menu item when a key/letter is pressed while the flyout is open like in MS Office apps?

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

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

谢谢。

您可以在MenuFlyout打开时将PreviewKeyDown事件处理程序添加到当前窗口内容。 当按下特定的VirtualKey时,在PreviewKeyDown事件处理程序中调用匹配方法。 然后在MenuFlyout关闭时删除PreviewKeyDown事件处理程序,以避免错误触发。

<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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM