Saya lebih suka pendekatan ini daripada yang lain di atas karena sejalan dengan MVVM.
Todd Sprang
1
Elemen fokus hanya baca benar Bagaimana Anda bisa mengatur di xaml? Saya menggunakan ini dan tidak berhasil <Style.Triggers> <Trigger Property = "Validation.HasError" Value = "True"> <Setter Property = "FocusManager.FocusedElement" Value = "{Binding Source = {RelativeSource Self}}" /> </Trigger> </Style.Triggers>
Ini hanya bekerja sekali. Jika Anda ingin mengubah fokus setelah halaman dibuat, Anda perlu melakukannya secara terprogram.
Joe Steele
ini juga berhasil. txtCompanyID.Focusable = true; Keyboard.Focus (txtCompanyID);
MindRoasterMir
51
Sejauh ini tidak ada yang menjelaskan mengapa kode dalam pertanyaan tersebut tidak berfungsi. Dugaan saya adalah bahwa kode tersebut ditempatkan di konstruktor Window. Namun saat ini masih terlalu dini untuk menetapkan fokus. Itu harus dilakukan setelah Jendela siap untuk interaksi. Tempat terbaik untuk kode adalah acara Loaded:
Hanya ada satu elemen di seluruh desktop yang memiliki fokus keyboard. Di WPF, elemen yang memiliki fokus keyboard akan membuat IsKeyboardFocused disetel ke true.
Anda dapat memutuskan setelah garis pengaturan dan memeriksa nilai IsKeyboardFocusedproperti. Juga periksa apakah Anda benar-benar mencapai garis itu atau mungkin Anda menyetel beberapa elemen lain untuk mendapatkan fokus setelah itu.
Ini juga berhasil untuk saya. Sisanya tidak. Terima kasih untuk tautannya, itu cukup menarik. Juga menarik bahwa hal sederhana seperti itu bisa sangat rumit.
TravisWhidden
2
Jawaban di atas berfungsi dengan baik terlepas dari apakah wadahnya adalah Gird atau StackPanel. Karena struktur kisi Anda tidak jelas, sulit untuk mengatakan apa yang salah. Senang melihat alternatifnya.
BergunaBee
1
Bagi saya, ini juga satu-satunya yang berfungsi dengan benar. Cara yang bagus.
OregonGhost
7
Jika Anda belum menemukan solusi di jawaban lain, begitulah cara saya menyelesaikan masalah.
Jawaban:
Di XAML:
sumber
Sejauh ini tidak ada yang menjelaskan mengapa kode dalam pertanyaan tersebut tidak berfungsi. Dugaan saya adalah bahwa kode tersebut ditempatkan di konstruktor Window. Namun saat ini masih terlalu dini untuk menetapkan fokus. Itu harus dilakukan setelah Jendela siap untuk interaksi. Tempat terbaik untuk kode adalah acara Loaded:
sumber
Focus()
memerlukan parameter status fokus - misalnyatxtCompanyId.Focus(FocusState.Keyboard)
coba FocusManager.SetFocusedElement
sumber
msdn:
Anda dapat memutuskan setelah garis pengaturan dan memeriksa nilai
IsKeyboardFocused
properti. Juga periksa apakah Anda benar-benar mencapai garis itu atau mungkin Anda menyetel beberapa elemen lain untuk mendapatkan fokus setelah itu.sumber
Coba ini :
MyTextBox.Focus ( );
sumber
Tak satu pun dari ini berhasil untuk saya karena saya menggunakan kisi daripada StackPanel.
Saya akhirnya menemukan contoh ini: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
dan mengubahnya menjadi ini:
Di bagian 'Sumber Daya':
Dalam definisi kisi saya:
sumber
Jika Anda belum menemukan solusi di jawaban lain, begitulah cara saya menyelesaikan masalah.
Dari apa yang saya pahami, solusi lain mungkin tidak berfungsi karena panggilan ke
Focus()
dipanggil sebelum aplikasi membuat komponen lain.sumber
Solusi lain yang mungkin adalah dengan menggunakan FocusBehavior yang disediakan oleh Kerangka MVVM DevExpress gratis :
Ini memungkinkan Anda untuk memfokuskan kontrol saat dimuat, saat peristiwa tertentu dimunculkan atau properti diubah.
sumber
Dalam Kode belakang Anda dapat mencapainya hanya dengan melakukan ini.
Catatan: Ini tidak akan berfungsi sebelum jendela dimuat
sumber