当前位置:  开发笔记 > 编程语言 > 正文

显示带有WPF,Winforms和双显示器的窗口

如何解决《显示带有WPF,Winforms和双显示器的窗口》经验,为你挑选了2个好方法。

我有一个2监视器和一个启动WPF窗口的WinForm应用程序.我想获得WinForm所在的屏幕,并在同一屏幕上显示WPF窗口.我怎样才能做到这一点?



1> Adrian..:

WPF不包括方便的System.Windows.Forms.Screen类,但您仍然可以使用其属性在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应用程序在不同的屏幕上,或者你使用默认按钮,或其他).

编辑:这是一个SDK文档的链接,该文档关于使用InterOp将WPF窗口置于非WPF窗口的中心.它基本上完成了我在描述数学方面所描述的内容,但正确地允许您使用Window的HWND设置WPF窗口的"Owner"属性.



2> Simon Brangw..:

这是最简单的方法(使用WindowStartupLocation.CenterOwner).

MyDialogWindow dialogWindow = new MyDialogWindow();
dialogWindow.Owner = this;
dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;

dialogWindow.ShowDialog();

无需互操作或设置窗口坐标:)

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有