ค้นหาจุดจับสำหรับหน้าต่าง WPF


109

แบบฟอร์ม Windows มีคุณสมบัติ win1 จัดการซึ่งถ้าฉันจำได้จะส่งคืนหมายเลขอ้างอิงของหมายเลขอ้างอิงหน้าต่างหลักหรือไม่

มีวิธีที่เทียบเท่ากันในการรับหมายเลขอ้างอิงของ WPF Window หรือไม่?

ฉันพบรหัสต่อไปนี้ทางออนไลน์

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

แต่ฉันไม่คิดว่าจะช่วยฉันได้เพราะแอปพลิเคชันของฉันมีหลายหน้าต่าง

ขอบคุณ !!


24
ให้ฉันให้คำแนะนำที่เป็นมิตรกับคุณ Evan อย่าทำโปรแกรมลัทธิขนส่งสินค้า! ผ่ารหัสที่คุณพบทางออนไลน์ คุณสามารถเห็นได้อย่างชัดเจนว่ามันผ่าน Application.Current.MainWindow และจากนั้นคุณสามารถให้เหตุผลว่าการส่งการอ้างอิงไปยังหน้าต่างอื่นคุณจะได้รับคำตอบของคุณ ฉันไม่เคยใช้ WindowInteropHelper แต่ก็ยังสามารถตอบคำถามได้เพียงแค่ให้เหตุผล
Gregory Higley

1
ถูกต้องขอบคุณ! วันนี้ฉันเหนื่อย :)
Evan

5
ไม่มีปัญหา! และฉันไม่ได้หมายความว่าเป็นการวิจารณ์เพียงเพื่อเป็นประโยชน์ เราทุกคนได้ทำการเพาะเลี้ยงสินค้าเล็กน้อยแล้วในตอนนี้ :)
Gregory Higley

คำตอบ:


142

แทนที่จะส่งผ่านApplication.Current.MainWindowเพียงส่งการอ้างอิงไปยังหน้าต่างใดก็ตามที่คุณต้องการ: new WindowInteropHelper(this).Handleและอื่น ๆ


ฉันเพิ่งค้นพบว่ากล่องโต้ตอบทั่วไปของ FileSave ใช้การอ้างอิงไปยังหน้าต่างระดับบนสุดเพื่อให้คุณสามารถส่งผ่านตัวอย่างเช่นการอ้างอิงไปยังหน้าต่างหลักของแอปพลิเคชัน บันทึกบริการ Interop เมื่อคุณต้องการจริงๆ
David

39

เพียงใช้หน้าต่างของคุณกับคลาส WindowsInteropHelper:

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

ตอนนี้คุณกำลังขอหน้าต่างหลักของแอปพลิเคชันซึ่งจะมีอยู่เสมอ คุณสามารถใช้เทคนิคเดียวกันนี้บน Window ใดก็ได้หากเป็นคลาส Window ที่ได้รับ System.Windows.Window



3

หากคุณต้องการจัดการหน้าต่างสำหรับแอปพลิเคชันทั้งหมดของคุณWindowด้วยเหตุผลบางประการคุณสามารถใช้Application.Windowsคุณสมบัติเพื่อรับ Windows ทั้งหมดจากนั้นใช้WindowInteropHandlerเพื่อรับที่จับตามที่คุณได้แสดงไปแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.