簡體   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