【Windows 10 應用開發】自訂快速鍵

來源:互聯網
上載者:User

標籤:限制   問題   視窗   鍵盤事件   ted   ica   rcu   縮放   變數   

上一篇鳥文中,老周通過史無前例的代碼向各位 demo 了訪問鍵的用法(即 Alt + 某某)。不過,大夥伴們一定會發現,訪問鍵畢竟限制較大,不太靈活,也不好發揮,於是就需要自訂快速鍵了。

其實,自訂快速鍵也不是什麼很玄的東西,老周向來不喜歡故弄玄虛,說白了嘛,就是對鍵盤事件的處理。UWP 與 WPF 有相似處,但也有差異。這些差異是不影響咱們編程的,要是有些差異你就覺得有困難了,那證明你的編程水平實在太差,趕緊回家給黨組織寫 10 份 800000 字的檢討。

既然是鍵盤事件了,你首先閉上眼睛,一邊養神一邊想想,鍵盤事件會涉及到什麼關聯的資料呢。首先,程式必須知道哪個鍵被操作了,是吧,而每個鍵都有內建的碼位的,如虛鍵碼,這個好辦,Windows.System.VirtualKey 枚舉已經為我們定義好了,所以這個你不必煩心;接著,我們會想到,一個鍵會有啥操作呢?是了,無非就是按下和鬆開,即 Key Down和Key Up。

只要以上問題你想通了,那事情就很好弄了,比吃栗子還簡單。

 

UWP的SDK 給我們準備了兩個鍵盤事件:KeyDown在鍵被按下時發生,KeyUp在鍵彈起時發生。至於要處理哪個事件,或者是否兩個都處理,那就看你要做什麼了。

要注意,這兩個鍵盤事件出現在兩個地方:

1、UIElement 類公開了這兩個事件,這是用於處理使用者介面上的元素的鍵盤行為的,但不包括當前視窗。

2、要在當前視窗層面上處理鍵盤事件,就要用到 CoreWindow 類,該類也公開這兩個鍵盤事件。調用 GetForCurrentThread 靜態方法,可以擷取到當前視窗的執行個體。

 

Part 1 :簡單按鍵處理

所謂簡單按鍵,就是只按一個鍵的快速鍵。這裡我用一例子來示範。

介面上有一個 ListView 控制項,裡面有四個選項,XAML 如下。

        <ListView Name="lv" Margin="13">            <ListViewItem>飛機</ListViewItem>            <ListViewItem>火車</ListViewItem>            <ListViewItem>單車</ListViewItem>            <ListViewItem>公交車</ListViewItem>        </ListView>

隨後,咱們實現的功能,用F1、F2、F3 和 F4 四個鍵分別代表選中上面清單控制項中的項。如F1選中第一項,F2選中第二項等。

此處,老周選用 CoreWindow 類,即該快速鍵是可以在當前視窗範圍內捕捉的。

        CoreWindow coreWind = null;        ……        coreWind = CoreWindow.GetForCurrentThread();         coreWind.KeyDown += OnWindowKeyDown;        ……        private void OnWindowKeyDown(CoreWindow sender, KeyEventArgs args)        {            switch (args.VirtualKey)            {                case Windows.System.VirtualKey.F1:                    lv.SelectedIndex = 0;                    break;                case Windows.System.VirtualKey.F2:                    lv.SelectedIndex = 1;                    break;                case Windows.System.VirtualKey.F3:                    lv.SelectedIndex = 2;                    break;                case Windows.System.VirtualKey.F4:                    lv.SelectedIndex = 3;                    break;            }        }

上面代碼很好懂,此處就不解釋了,節省600個字。

 

Part 2 :複合快速鍵處理

所謂複合快速鍵,就是同步選取兩個或兩個以上的鍵,咱們少說P話,還是通過執行個體來說明吧。這個例子是這樣的:在頁面上使用 Image 控制項顯示一張圖片,然後,按下【 Ctrl + 加號】來放大映像,按【Ctrl + 減號】來縮小映像。

其中主要的 XAML 如下。

        <Image Source="Assets\1.jpg" Margin="6" RenderTransformOrigin="0.5,0.5" >            <Image.RenderTransform>                <ScaleTransform x:Name="scl" ScaleX="1.0" ScaleY="1.0"/>            </Image.RenderTransform>        </Image>

由於 Image 控制項不能接收鍵盤輸入焦點,元素KeyDown和KeyUp事件不能響應,還是考慮用CoreWindow類上的事件。

        CoreWindow coreWind = null;        protected override void OnNavigatedTo(NavigationEventArgs e)        {            coreWind = CoreWindow.GetForCurrentThread();            coreWind.KeyDown += OnKeydown;            coreWind.KeyUp += OnKeyup;        }

這裡要特特地聲明一個bool類型的變數,用來表示Ctrl鍵是否按下。

bool Ctrl_down = false;

如果你不想用變數來標誌Ctrl鍵是否按下,也可以訪問 CoreWindow 對象的 GetKeyState(Windows.System.VirtualKey) 方法,來檢查一下Ctrl 鍵是否已經按下。不過,老周認這還是直接聲明一個變數來儲存按鍵狀態更簡單。

在KeyUp事件處理中,如果Ctrl鍵彈起,就讓Ctrl_down變數改為 false。

        private void OnKeyup(CoreWindow sender, KeyEventArgs e)        {            if (e.VirtualKey == VirtualKey.Control)            {                Ctrl_down = false;            }        }

在 KeyDown 事件中,分兩種情形:a、如果按下的是Ctrl鍵,就把變數Ctrl_down變數改為 true;b、如果Ctrl鍵已按下,並且還按了其他鍵,就要判斷一下,是不是按了加號鍵或減號鍵。加號鍵就放大映像,減號鍵就縮小映像。

        private void OnKeydown(CoreWindow sender, KeyEventArgs e)        {            if (e.VirtualKey == VirtualKey.Control)            {                Ctrl_down = true;                return;            }            // 進行縮放處理            if (Ctrl_down)            {                switch (e.VirtualKey)                {                    case VirtualKey.Add:                        if (scl.ScaleX < 5.0) scl.ScaleX += 0.2;                        if (scl.ScaleY < 5.0) scl.ScaleY += 0.2;                        break;                    case VirtualKey.Subtract:                        if (scl.ScaleX > 0.3) scl.ScaleX -= 0.2;                        if (scl.ScaleY > 0.3) scl.ScaleY -= 0.2;                        break;                }            }        }

現在運行樣本,然後自己按【Ctrl + (+)】和【Ctrl + (-)】鍵試試。

 

請各位嚴重注意一下:Key 事件並不記錄 ALT 鍵,該鍵在 VirtualKey 枚舉中用 Menu 表示,這傢伙比較另類。它可以從表示按鍵狀態的 CorePhysicalKeyStatus 結構的 IsMenuKeyDown 欄位擷取。

 

本文兩個樣本原始碼的

 

【Windows 10 應用開發】自訂快速鍵

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.