標籤:await 判斷 這一 sse upd sam dismiss 設定 message
UWP 雖然主要面向觸控操作,但 Windows 裝置是萬能工具,不用手指不用筆的時候,也可能會接上鍵盤耍耍。因此,給應用介面上的一些元素弄個快捷訪問鍵也挺不錯的。為了使用 Windows 上的各類應用具備統一性,UWP app的快捷訪問鍵延續了傳統,啟用方法也是先按 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 應用開發】使用快捷訪問鍵