1. 程式人生 > >【Windows 10 應用開發】使用快捷訪問鍵

【Windows 10 應用開發】使用快捷訪問鍵

width object block 菜單項 miss await 觸控 程序 應用

UWP 雖然主要面向觸控操作,但 Windows 設備是萬能工具,不用手指不用筆的時候,也可能會接上鍵盤耍耍。因此,給應用界面上的一些元素弄個快捷訪問鍵也挺不錯的。為了使用 Windows 上的各類應用具備統一性,UWP 應用的快捷訪問鍵延續了傳統,激活方法也是先按 Alt 鍵,然後在不松開 Alt 鍵的前提下再按訪問鍵。

咱們先用一個示例來表演一下。

下面 XAML 聲明了一個按鈕,並設置了訪問鍵。

 <Button Content="Update" Click="OnUpdate" AccessKey="U"/>

訪問鍵多用於按鈕和菜單項,因此使用按鈕時,訪問鍵被激活後,會關聯地自動引發 Click 事件。

下面我們處理一下 Click 事件,彈一個對話框。

        private async void OnUpdate(object sender, RoutedEventArgs e)
        {
            messageDlg.Content = "Update 按鈕被激活。";
            await messageDlg.ShowAsync();
        }

現在這個訪問鍵就能使用了。運行程序,然後按 Alt + U ,就能看到如下圖所示的效果了。

技術分享

按鈕比較特殊,訪問鍵激活時會自動與 Click 事件關聯,可是,對於一般的 UI 元素就不行了。比如

<Rectangle Fill="Red" Height="30" Width="100" HorizontalAlignment="Left" AccessKey="R"/>

對於以上矩形,按下 Alt + R 系統是無法判斷其要完成的行為的,那要是我真想讓這個矩形也能響應訪問鍵,怎麽弄? 這時候就要處理 AccessKeyInvoked 事件,當訪問鍵被正確識別,就會引發這個事件,我們可以處理這個事件,然後寫上自己的代碼。

比如我這裏,同樣是彈出對話框。

 <Rectangle Fill="Red" …… AccessKey="R"
AccessKeyInvoked="Rectangle_AccessKeyInvoked" />

下面是事件處理代碼。

        private async void Rectangle_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEventArgs args)
        {
            messageDlg.Content = "這是紅色矩形。";
            await messageDlg.ShowAsync();
        }

運行程序後,按 Alt + R,就會引發事件了。如下圖

技術分享

要想顯示訪問鍵提示,只需按一下 Alt 鍵即可,如下圖。

技術分享

有大夥伴會說,我要是不想用系統默認的訪問鍵提示呢,我想自己處理。

當然是可以的,首先,你得在代碼裏面執行這一行代碼。

 Windows.UI.Xaml.Input.AccessKeyManager.AreKeyTipsEnabled = false;

這樣,默認的顯示提示就被禁用了。

然後,你要處理兩個事件:

AccessKeyDisplayRequested ——當要顯示訪問鍵提示時,引發該事件,這時候可以添加你的處理代碼,向用戶顯示訪問鍵提示。

AccessKeyDisplayDismissed—— 當提示要關閉(消失)時引發,在此事件中,你要用你的代碼來隱藏訪問鍵提示。

來,我們改改上面的矩形。

            <Rectangle Fill="Red" Height="30" Width="100" HorizontalAlignment="Left" AccessKey="R" AccessKeyInvoked="Rectangle_AccessKeyInvoked" Margin="0,13"
                      AccessKeyDisplayRequested="OnAccessKeyDisplayReq"
                       AccessKeyDisplayDismissed="OnAccessKeyDisplayDism">
                <Rectangle.ContextFlyout>
                    <Flyout Placement="Bottom">
                        <Flyout.Content>
                            <TextBlock FontSize="16" Foreground="Red"/>
                        </Flyout.Content>
                    </Flyout>
                </Rectangle.ContextFlyout>
            </Rectangle>

我選用了一個 Flyout 類來顯示提示。

下面是處理事件代碼。

        private void OnAccessKeyDisplayReq(UIElement sender, AccessKeyDisplayRequestedEventArgs args)
        {
            FrameworkElement ele = sender as FrameworkElement;
            Flyout fly = ele.ContextFlyout as Flyout;

            TextBlock tb = fly.Content as TextBlock;
            tb.Text = $"請按【Alt + {ele.AccessKey}】鍵";
            fly.ShowAt(ele);
        }

        private void OnAccessKeyDisplayDism(UIElement sender, AccessKeyDisplayDismissedEventArgs args)
        {
            FrameworkElement ele = sender as FrameworkElement;
            Flyout fl = ele.ContextFlyout as Flyout;
            fl.Hide();
        }

好,現在再次運行,然後按一下 Alt 鍵。效果如圖。

技術分享

好了,今天的話題就聊到這裏吧,老周也餓了,該填填肚子了。

本文示例代碼下載地址

【Windows 10 應用開發】使用快捷訪問鍵