Salah satu caranya adalah dengan menambahkan tombol pintas Anda ke perintah itu sendiri sebagai InputGestures
. Perintah diimplementasikan sebagai RoutedCommands
.
Ini memungkinkan tombol jalan pintas bekerja meskipun tidak terhubung ke kontrol apa pun. Dan karena item menu memahami gerakan keyboard, mereka akan secara otomatis menampilkan tombol pintas Anda dalam teks item menu, jika Anda menghubungkan perintah itu ke item menu Anda.
Buat atribut statis untuk memegang perintah (lebih disukai sebagai properti di kelas statis yang Anda buat untuk perintah - tetapi untuk contoh sederhana, cukup gunakan atribut statis di window.cs):
public static RoutedCommand MyCommand = new RoutedCommand();
Tambahkan kunci pintas yang harus memanggil metode:
MyCommand.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control));
Buat perintah yang mengikat yang menunjuk ke metode Anda untuk memanggil eksekusi. Letakkan ini di binding perintah untuk elemen UI di mana ia harus bekerja untuk (misalnya, jendela) dan metode:
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:MyWindow.MyCommand}" Executed="MyCommandExecuted"/>
</Window.CommandBindings>
private void MyCommandExecuted(object sender, ExecutedRoutedEventArgs e) { ... }
Executed
kode untuk perintah akan berakhir di kode-belakang (jendela atau kontrol-pengguna) daripada model tampilan, yang bertentangan dengan menggunakan perintah biasa (ICommand
implementasi kustom ).Saya menemukan ini persis apa yang saya cari terkait dengan pengikatan kunci di WPF:
Lihat posting blog MVVM CommandReference dan KeyBinding
sumber
Coba kode ini ...
Pertama buat objek RoutedComand
sumber
Itu tergantung di mana Anda ingin menggunakannya.
TextBoxBase
Kontrol yang diterima telah menerapkan pintasan tersebut. Jika Anda ingin menggunakan pintasan keyboard khusus, Anda harus melihat pada gerakan Perintah dan Input. Ini adalah tutorial kecil dari Switch on the Code : WPF Tutorial - Command Bindings dan Custom Commandssumber
Mendokumentasikan jawaban ini untuk orang lain, karena ada cara yang lebih sederhana untuk melakukan ini yang jarang dirujuk, dan tidak perlu menyentuh XAML sama sekali.
Untuk menautkan pintasan keyboard, di konstruktor Window cukup tambahkan KeyBinding baru ke koleksi InputBindings. Sebagai perintah, berikan kelas perintah sewenang-wenang Anda yang mengimplementasikan ICommand. Untuk metode eksekusi, cukup terapkan logika apa pun yang Anda butuhkan. Dalam contoh saya di bawah ini, kelas WindowCommand saya mengambil delegasi yang akan dieksekusi setiap kali dipanggil. Ketika saya membangun WindowCommand baru untuk lulus dengan pengikatan saya, saya hanya menunjukkan di inisialisasi saya, metode yang saya ingin menjalankan WindowCommand.
Anda dapat menggunakan pola ini untuk menghasilkan pintasan keyboard cepat Anda sendiri.
Buat kelas WindowCommand sederhana yang membutuhkan delegasi eksekusi untuk mematikan metode apa pun yang ditetapkan di atasnya.
sumber
Saya memiliki masalah yang sama dan menemukan jawaban aliwa @ menjadi solusi yang paling bermanfaat dan paling elegan; Namun, saya memerlukan kombinasi tombol tertentu, Ctrl+ 1. Sayangnya saya mendapat kesalahan berikut:
Dengan sedikit pencarian lebih lanjut, saya mengubah jawaban aliwa @ sebagai berikut:
Saya menemukan ini bekerja sangat baik untuk kombinasi yang saya butuhkan.
sumber
<UserControl.InputBindings> <KeyBinding Gesture="Enter" Command="{Binding someCommand}"/> </UserControl.InputBindings>
VB.NET:
Di dalam acara yang dimuat :
Tidak diperlukan XAML.
sumber
Meskipun jawaban teratas sudah benar, saya pribadi suka bekerja dengan properti terlampir untuk memungkinkan solusi diterapkan ke apa pun
UIElement
, terutama ketikaWindow
tidak mengetahui elemen yang harus difokuskan. Dalam pengalaman saya, saya sering melihat komposisi beberapa model tampilan dan kontrol pengguna, di mana jendela sering tidak lebih dari wadah root.Potongan
Dengan properti terlampir ini, Anda dapat menentukan pintasan fokus untuk UIElement apa pun. Ini akan secara otomatis mendaftarkan pengikatan input di jendela yang mengandung elemen.
Penggunaan (XAML)
Kode sumber
Sampel lengkap termasuk implementasi FocusElementCommand tersedia sebagai inti: https://gist.github.com/shuebner20/c6a5191be23da549d5004ee56bcc352d
Penafian: Anda dapat menggunakan kode ini di mana saja dan gratis. Harap diingat, bahwa ini adalah sampel yang tidak cocok untuk penggunaan berat. Misalnya, tidak ada pengumpulan sampah dari elemen yang dihapus karena Perintah akan memegang referensi kuat ke elemen.
sumber
Cara mengaitkan perintah dengan
MenuItem
:sumber