Menemukan pegangan ke jendela WPF


109

Formulir Windows memiliki properti win1.Handle yang, jika saya ingat, mengembalikan pegangan dari pegangan jendela utama?

Apakah ada cara yang setara untuk mendapatkan pegangan Jendela WPF?

Saya menemukan kode berikut online,

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

tetapi saya rasa itu tidak akan membantu saya karena aplikasi saya memiliki banyak jendela.

Terima kasih!!


24
Izinkan saya memberi Anda beberapa nasihat ramah, Evan. Jangan lakukan pemrograman kultus kargo! Membedah kode yang Anda temukan online. Anda dapat melihat dengan jelas bahwa ia melewati Application.Current.MainWindow, dan dari situ Anda dapat beralasan bahwa dengan meneruskan referensi ke jendela lain, Anda akan mendapatkan jawaban. Saya tidak pernah menggunakan WindowInteropHelper, tetapi masih bisa menjawab pertanyaan hanya dengan menjelaskannya.
Gregory Higley

1
Anda benar, terima kasih! saya lelah hari ini :).
Evan

5
Tidak masalah! Dan saya tidak bermaksud sebagai kritik, hanya untuk membantu. Kita semua kadang-kadang melakukan sedikit pembiakan kargo. :)
Gregory Higley

Jawaban:


142

Nah, alih-alih meneruskan Application.Current.MainWindow, cukup berikan referensi ke jendela mana pun yang Anda inginkan: new WindowInteropHelper(this).Handledan seterusnya.


Saya baru saja menemukan bahwa dialog umum FileSave mengambil referensi ke jendela tingkat atas, sehingga Anda dapat meneruskan, misalnya, referensi ke Jendela Utama aplikasi. Simpan layanan Interop saat Anda benar-benar membutuhkannya.
David A. Gray

39

Cukup gunakan jendela Anda dengan kelas WindowsInteropHelper:

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

Saat ini, Anda meminta jendela utama Aplikasi, yang akan selalu ada. Anda dapat menggunakan teknik yang sama ini pada setiap Window, bagaimanapun, asalkan itu adalah kelas Window yang diturunkan dari System.Windows.Window.


8

kamu bisa memakai :

Process.GetCurrentProcess().MainWindowHandle

3

Jika Anda ingin menangani jendela untuk SEMUA aplikasi Anda Windowkarena alasan tertentu, Anda dapat menggunakan Application.Windowsproperti untuk mendapatkan semua Windows dan kemudian menggunakan WindowInteropHandleruntuk mendapatkan pegangannya seperti yang telah Anda tunjukkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.