我查看了Stack溢出并看到了一些帖子几乎解决了这个问题但不是真的。具体而言,我指的是部署到可能有3个或4个显示器的用户的应用程序,并且应用程序想要记住在启动时要去哪个。
我有一个WPF应用程序,我希望在表单执行OnClose时保存它所在的屏幕。然后当它加载时我想把我的应用程序放在那个屏幕上。
如何做到这一点(没有hacky Win32 API调用)?
编辑:在之前的StackO帖子中有人提到过这样的事情:
var screen = System.Windows.Forms.Screen.FromRectangle(
new System.Drawing.Rectangle(
(int)myWindow.Left, (int)myWindow.Top,
(int)myWindow.Width, (int)myWindow.Height));
一旦我screen
,似乎我唯一能做的就是检查应用程序是否在主屏幕上。哪个好...如果我的用户只有两个屏幕,但如果他们有3个以上则不好。对于这个生成的screen
对象,我能做些什么比检查它是否是主要对象更好。
答案 0 :(得分:2)
您可以从Screen.AllScreens属性
获取有关多个监视器的更多信息http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.allscreens.aspx
同样来自内存,我认为如果您只是保存Window Left和Top位置并在加载应用时恢复它们,这适用于多个监视器。
答案 1 :(得分:1)
我以前使用ViewManager类,自定义XML配置文件和MVVM执行此操作。本质上,当调用OnClose时,将轮询ViewManager类(实际上只包含自定义ViewInfo实例的集合的自定义类)以查找当前打开的视图和顺序(通过使用Ctrl +可以选中它们) Tab)以及正在显示的记录的ID;这个应用程序使用Entity Framework来访问数据库数据,每个应用程序视图映射到一个记录集合或一个特定类型的单个记录。
无论如何,XML输出将包含View的名称,应用程序(应用程序的几个部分,我在内部称为应用程序,它所属的应用程序),有关已加载的记录的信息等等。
加载程序后,唯一自动加载的View是HomeView,它可能包含所有其他视图。 ViewManager检查XML文件并根据其内容加载视图。可以在选项屏幕中关闭此操作,以便用户在进入时可以看到干净的工作区。