WPF 的使用者控制項中快捷鍵繫結無反應解決方案

2021-08-19 18:31:15 字數 1382 閱讀 8501

先介紹一下快捷鍵的繫結方式:

window視窗:

usercontrol使用者控制項:

快捷鍵繫結在主窗體window頁面或usercontrol頁面都可以實現,但進行二級彈框時,若是window頁面,則還起作用,若是usercontrol完全沒反應。  這是因為usercontrol不會主動獲得焦點而導致的,彈出usercontrol窗體也是用window進行彈出的,此時相當於焦點在外層window上,而不是usercontrol上面,所以以下提供3中解決方案:

1.使用者控制項顯示的時候把焦點強制獲取到(最省事的辦法)

1)usercontrol頁面的cs類中:

public mainwindow()        

2)或者再彈框的時候,進行設定

public delegatecommand commandshowdialog

keyusercontrol keyuser = null;

private void oncommandshowdialog()

1)在usercontrol頁面對應的cs類中設定:

public keyusercontrol()

//方法二,方法一可以注釋掉,用方法二兩行**,道理是一樣的,都是為了獲取usercontrol頁面的焦點

//focusable = true;

//focus();

}2)也可在viewmodel中設定:

public delegatecommand commandshowdialog

keyusercontrol keyuser = null;

private void oncommandshowdialog()

private void keyusercontrol_mouseenter(object sender, mouseeventargs e)

3.用keydown事件

不能在usercontrol頁面對應的cs類中設定keydown事件,因為usercontrol是被window彈出的,所以此時焦點在外層window上,usercontrol沒焦點,而keydown事件的前提是有焦點。具體原因可以看我的另一篇《

wpf經典教程--鍵盤輸入事件, 滑鼠輸入事件, 焦點處理

》。

只能在viewmodel中設定keydown事件:
public delegatecommand commandshowdialog

keyusercontrol keyuser = null;

private void oncommandshowdialog()

private void usercontrol_keydown(object sender, keyeventargs e)

WPF中設定快捷鍵

原文 wpf中設定快捷鍵 方式1 窗體中加入資源 其中 commandbinding cut commandbinding copy commandbinding paste 是按下快捷鍵對用的事件操作 private void commandbinding cut object sender,ex...

WPF中設定快捷鍵

原文 wpf中設定快捷鍵 方式1 窗體中加入資源 其中 commandbinding cut commandbinding copy commandbinding paste 是按下快捷鍵對用的事件操作 private void commandbinding cut object sender,ex...

Layout中的快捷鍵 無模式命令

無模式命令 aa 任意角走線 ao 正交走線 ad 對角線走線 以上三個也可以通過preference中design頁line trace angle項 進行設定 c 反顯顯示背景,可用於檢視負片的鋪銅情況 d 開關當前層顯示 do 用於開關選擇是否顯示drill孔 drp drc prevent ...