我有一個2監視器和一個啓動WPF窗口的WinForm應用程序。我想獲取WinForm所在的屏幕,並在同一屏幕上顯示WPF窗口。我怎樣才能做到這一點?顯示WPF,Winforms和雙監視器的窗口
回答
WPF不包含方便的System.Windows.Forms。 Screen class,但仍然可以使用它的屬性在WinForms應用程序中完成您的任務。
假設這指的WinForms窗口和_wpfWindow是定義的變量在下面的例子中參照WPF窗口(這將是在任何代碼處理程序設置到打開WPF窗口,像一些Button.Click處理器):
Screen screen = Screen.FromControl(this);
_wpfWindow.StartupLocation = System.Windows.WindowStartupLocation.Manual;
_wpfWindow.Top = screen.Bounds.Top;
_wpfWindow.Left = screen.Bounds.Left;
_wpfWindow.Show();
上面的代碼將在包含WinForms窗口的屏幕的左上角實例化WPF窗口。如果您希望將其放置在屏幕中間的其他位置,或者位於WinForms窗口右下方的「級聯」樣式中,我會將算法留給您。
即獲得在屏幕中間的WPF窗口將是另一種方法簡單地使用
_wpfWIndow.StartupLocation = System.Windows.WindowStartupLocation.CenterScreen
然而,這是不是很靈活,因爲它使用了鼠標的位置找出哪些屏幕顯示WPF窗口(顯然,如果用戶快速移動它,或者使用默認按鈕或其他類型,鼠標可能與WinForms應用程序位於不同的屏幕上)。
編輯:Here's a link to an SDK document關於使用InterOp讓您的WPF窗口集中在非WPF窗口。它基本上是我在描述數學方面所描述的,但正確地允許您使用Window的HWND設置WPF窗口的「所有者」屬性。
您應該可以使用System.Windows.Forms.Screen [1],並使用FromControl方法獲取表單的屏幕信息。然後,您可以根據您試圖找到的屏幕來定位WPF窗口(頂部,左側)。
[1]如果您不加載WinForms dll,也可以使用win32 MonitorFromRect等。但是,由於您已經獲得了winforms API,因此您不會支付任何內存/ perf命中。
以下是最簡單的方法(使用WindowStartupLocation.CenterOwner)。
MyDialogWindow dialogWindow = new MyDialogWindow();
dialogWindow.Owner = this;
dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
dialogWindow.ShowDialog();
無需互操作或設置窗口COORDS :)
做的另一種方法是:
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;
此=您的WPF窗口...
- 1. 雙顯示器上的窗口的Zorder
- 2. WPF顯示窗口
- 3. 在WPF窗口中顯示視頻
- 4. 雙顯示器父子窗口問題
- 5. 用WPF UserControl顯示另一個窗口的WinForms
- 6. 從WinForms表單顯示WPF窗口是絕對安全的嗎?
- 7. 檢測哪個監視器顯示窗口
- 8. 在VS2008監視窗口中顯示CPU寄存器
- 9. 告訴窗口哪個監視器顯示對話框
- 10. Process.Start和雙監視器
- 11. 淨/的WinForms,雙顯示器 - 無邊界窗口 - 最大化不起作用
- 12. 在雙顯示器上覆制彈出式窗口顯示器
- 13. WPF窗口顯示空白
- 14. 如何從WPF窗口顯示Winforms對話框?
- 15. 在監視窗口
- 16. 任務欄前面的WPF窗口(使用雙顯示器),我該怎麼做?
- 17. 在Mac中使用Carbon Framework檢測雙顯示器/監視器?
- 18. WPF vs Winforms中的窗口透明度
- 19. 在第二個監視器/電視下的主WPF窗口的屏幕截圖
- 20. 顯示從System.Configuration.Install.Installer類的WPF窗口
- 21. 顯示DirectX遊戲的WPF窗口ontop
- 22. 窗口顯示WPF中的事件?
- 23. WPF模態窗口作爲WinForms中的工具窗口消失
- 24. 多顯示器/雙顯示器系統上的window.open() - 窗口在哪裏彈出?
- 25. VBA代碼監視任務管理器中顯示的窗口過程
- 26. WPF雙值顯示
- 27. 搜索在監視窗口
- 28. 填充在監視窗口
- 29. 監視ForwardedEvents窗口日誌
- 30. 監視Eclipse窗口接受