【Windows 10 應用開發】使用快捷訪問鍵
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 應用開發】使用快捷訪問鍵