Tìm xử lý cho một cửa sổ WPF


109

Các biểu mẫu Windows có thuộc tính win1.Handle, nếu tôi nhớ lại, trả về xử lý của tay cầm cửa sổ chính?

Có cách nào tương đương để xử lý một Cửa sổ WPF không?

Tôi đã tìm thấy mã sau đây trực tuyến,

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

nhưng tôi không nghĩ điều đó sẽ giúp ích cho tôi vì ứng dụng của tôi có nhiều cửa sổ.

Cảm ơn!!


24
Hãy để tôi cho bạn một lời khuyên thân thiện, Evan. Đừng lập trình sùng bái hàng hóa! Phân tích mã bạn tìm thấy trực tuyến. Bạn có thể thấy rõ rằng nó vượt qua Application.Current.MainWindow và từ đó bạn có thể lập luận rằng bằng cách chuyển nó tham chiếu đến một cửa sổ khác, bạn sẽ nhận được câu trả lời của mình. Tôi chưa bao giờ sử dụng WindowInteropHelper, nhưng vẫn có thể trả lời câu hỏi chỉ đơn giản là suy luận ra.
Gregory Higley

1
bạn đúng, cảm ơn! hôm nay tôi mệt lắm :).
Evan

5
Không vấn đề gì! Và tôi không có ý chỉ trích nó, chỉ để hữu ích. Tất cả chúng tôi đã làm một chút vận chuyển hàng hóa bây giờ và sau đó. :)
Gregory Higley

Câu trả lời:


142

Thay vì chuyển Application.Current.MainWindow, chỉ cần chuyển một tham chiếu đến bất kỳ cửa sổ nào bạn muốn: new WindowInteropHelper(this).Handlev.v.


Tôi vừa phát hiện ra rằng hộp thoại FileSave chung có tham chiếu đến cửa sổ cấp cao nhất, vì vậy, bạn có thể chuyển, ví dụ: tham chiếu đến MainWindow của ứng dụng. Lưu các dịch vụ Interop khi bạn thực sự cần.
David A. Gray,

39

Chỉ cần sử dụng cửa sổ của bạn với lớp WindowsInteropHelper:

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

Ngay bây giờ, bạn đang yêu cầu cửa sổ chính của Ứng dụng, trong đó sẽ luôn có một cửa sổ. Tuy nhiên, bạn có thể sử dụng kỹ thuật tương tự trên bất kỳ Cửa sổ nào, miễn là nó là một lớp Cửa sổ dẫn xuất System.Windows.Window.


8

bạn có thể dùng :

Process.GetCurrentProcess().MainWindowHandle

3

Nếu bạn muốn các tay cầm cửa sổ cho TẤT CẢ các ứng dụng của Windowmình vì một lý do nào đó, bạn có thể sử dụng thuộc Application.Windowstính để lấy tất cả các Windows và sau đó sử dụng WindowInteropHandlerđể nhận các tay cầm của chúng như bạn đã trình bày.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.