Tôi có 2 màn hình và một ứng dụng WinForm khởi chạy cửa sổ WPF. Tôi muốn có được màn hình mà WinForm đang bật và hiển thị cửa sổ WPF trên cùng một màn hình. Tôi có thể làm cái này như thế nào?Hiển thị cửa sổ với màn hình WPF, Winforms và Dual
Trả lời
WPF không bao gồm System.Windows.Forms tiện dụng. Màn hình lớp học, nhưng bạn vẫn có thể sử dụng các thuộc tính của nó để hoàn thành nhiệm vụ của bạn trong ứng dụng WinForms của bạn.
Giả sử rằng này có nghĩa là cửa sổ WinForms và _wpfWindow là một biến định nghĩa tham khảo sổ WPF trong ví dụ dưới đây (đây sẽ là trong bất cứ mã xử lý bạn thiết lập để mở cửa sổ WPF, giống như một số Button.Click handler):
Screen screen = Screen.FromControl(this);
_wpfWindow.StartupLocation = System.Windows.WindowStartupLocation.Manual;
_wpfWindow.Top = screen.Bounds.Top;
_wpfWindow.Left = screen.Bounds.Left;
_wpfWindow.Show();
Mã trên sẽ khởi chạy cửa sổ WPF ở góc trên bên trái của màn hình chứa cửa sổ WinForms của bạn. Tôi sẽ để lại toán cho bạn nếu bạn muốn đặt nó ở vị trí khác như giữa màn hình hoặc theo kiểu "xếp tầng" bên dưới và bên phải của cửa sổ WinForms.
Một phương pháp mà được các cửa sổ WPF ở giữa màn hình sẽ chỉ cần sử dụng
_wpfWIndow.StartupLocation = System.Windows.WindowStartupLocation.CenterScreen
Tuy nhiên, đây không phải là khá linh hoạt vì nó sử dụng vị trí của chuột để tìm ra màn hình hiển thị cửa sổ WPF (và rõ ràng là chuột có thể nằm trên màn hình khác với ứng dụng WinForms nếu người dùng di chuyển nhanh hoặc bạn sử dụng nút mặc định hoặc bất kỳ thứ gì).
Chỉnh sửa: Here's a link to an SDK document về cách sử dụng InterOp để cửa sổ WPF của bạn tập trung vào cửa sổ không phải WPF. Nó về cơ bản những gì tôi đã mô tả về mặt toán học, nhưng chính xác cho phép bạn thiết lập thuộc tính "Chủ sở hữu" của WPF Window bằng HWND của Window.
Bạn sẽ có thể sử dụng System.Windows.Forms.Screen [1] và sử dụng phương thức FromControl để nhận thông tin màn hình cho biểu mẫu. Sau đó bạn có thể sử dụng điều này để định vị cửa sổ WPF (trên cùng, bên trái) dựa trên màn hình bạn đang cố gắng định vị nó.
[1] Bạn cũng có thể sử dụng win32 MonitorFromRect et al, nếu bạn không tải các dll WinForms. Tuy nhiên, vì bạn đã có API winforms, bạn sẽ không phải trả bất kỳ bộ nhớ/số lần truy cập nào.
Đây là cách đơn giản nhất (sử dụng WindowStartupLocation.CenterOwner).
MyDialogWindow dialogWindow = new MyDialogWindow();
dialogWindow.Owner = this;
dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
dialogWindow.ShowDialog();
Không cần interop hoặc thiết lập cửa sổ coords :)
Một cách khác để làm việc đó là:
WindowInteropHelper helper = new WindowInteropHelper(this);
this.StartupLocation = System.Windows.WindowStartupLocation.Manual;
this.Left = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Left;
this.Top = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Top;
này = Window WPF của bạn ...
- 1. Các vấn đề với màn hình sở thích dual-pane
- 2. Hiển thị màn hình "Chờ" trong WPF
- 3. Thay đổi kích thước cửa sổ WPF và nội dung đang hiển thị trên độ phân giải màn hình
- 4. Cách thêm cửa sổ WPF vào ứng dụng WinForms
- 5. Văn bản hiển thị khác nhau trên cửa sổ WPF và bên trong ElementHost
- 6. Cửa sổ WPF mới chỉ hiển thị bên dưới cửa sổ gốc
- 7. Sự kiện hiển thị cửa sổ trong WPF?
- 8. Cửa sổ WPF tải trước
- 9. WPF hiển thị hộp thoại trước cửa sổ chính
- 10. Xác định xem một cửa sổ WPF đang mở có hiển thị trên bất kỳ màn hình nào
- 11. Tiện ích Windows trong WPF - hiển thị khi "Hiển thị màn hình" được kích hoạt
- 12. Màn hình chỉ hiển thị ở góc trên cùng bên trái của cửa sổ
- 13. Tạo phần tử WPF ngoài màn hình và hiển thị bitmap
- 14. cửa sổ toàn màn hình java với độ trong suốt
- 15. OpenCV Hiển thị Cửa sổ Màu xám
- 16. OpenCV - đóng cửa sổ hiển thị hình ảnh
- 17. Đặt một cửa sổ trên màn hình
- 18. hình ảnh hiển thị khi di chuột qua cửa sổ?
- 19. Hiển thị hình ảnh .png trong cửa sổ trong wxPython
- 20. X11 Cửa sổ toàn màn hình (OpenGL)
- 21. QT Cửa sổ mờ và màn hình từ xa
- 22. Xác định kích thước của cửa sổ WPF SizeToContent trước khi hiển thị
- 23. Lấy System.Windows.Forms.IWin32Window từ cửa sổ WPF
- 24. Hiển thị cửa sổ (tập tin/thư mục) menu ngữ cảnh trong ứng dụng C# winforms
- 25. Nhiều cửa sổ toàn màn hình với DirectX 9.0
- 26. Không thể tạo cửa sổ bật lên toàn màn hình WPF
- 27. OpenGL: Hiển thị nhanh trên màn hình
- 28. Di chuyển cửa sổ từ màn hình thứ hai sang màn hình chính khi màn hình thứ hai không hiển thị
- 29. Đính kèm phiên 'màn hình' với việc tạo cửa sổ màn hình mới
- 30. Hiển thị cửa sổ lịch sử mục với TFS SDK