我有一个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窗口接受