在当前工作的监视器上保留 WPF 窗口(在多监视器设置中)[关闭/重复]

Posted

技术标签:

【中文标题】在当前工作的监视器上保留 WPF 窗口(在多监视器设置中)[关闭/重复]【英文标题】:Keep WPF window on the current working monitor (in multiple-monitor setup) [Closed/Duplicate] 【发布时间】:2021-11-09 17:00:57 【问题描述】:

我正在开发一个 WPF 应用程序。在我的应用程序中会有一个主窗口 (System.Windows.Window),在它之上我将在页面之间导航 (System.Windows.Controls.Page)。每当我从一个页面导航到另一个页面时,我希望它位于当前工作监视器的中心(多个监视器将可用)。我可以使用下面的代码实现主窗口的中心定位。 每当我在页面之间导航时,我将使用当前窗口的宽度和高度调用以下代码(例如:登录页面 -> 主页)

public static void CenterWindowOnScreen(double width, double height)

    double screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth;
    double screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight;
    double windowWidth = width;
    double windowHeight = height;
    App.Current.MainWindow.Left = (screenWidth / 2) - (windowWidth / 2);
    App.Current.MainWindow.Top = (screenHeight / 2) - (windowHeight / 2);

在应用程序启动时,主窗口加载登录页面并位于主监视器的中心。现在我将主窗口拖放到另一个(辅助)监视器,当我尝试登录时,主窗口会自动移动到主监视器。所以现在主窗口加载了主页,但窗口在主监视器上。我想将主窗口保持在当前工作监视器的中心(在本例中为辅助监视器)。

【问题讨论】:

我建议不要让你的窗口自己跳来跳去。作为用户,我觉得这很不愉快。如果您确定该功能,或者无法控制它,我建议使用SystemParameters.VirtualScreenHeightSystemParameters.VirtualScreenWidth,它们会返回所有屏幕的组合大小。 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

我只是错过了添加工作区的左坐标和上坐标。下面的链接帮助我将 WPF 窗口集中在当前工作的监视器上,并连接了多个监视器(具有不同的 DPI 比例)。 访问https://***.com/a/68283497/6454203

【讨论】:

首选标记为重复和/或关闭您的问题,而不是提供另一个链接。这是为了防止使用相同的答案多次提出相同的问题

以上是关于在当前工作的监视器上保留 WPF 窗口(在多监视器设置中)[关闭/重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI

如何获得活动屏幕尺寸?

lambda函数在多进程中不起作用

Make标签在多个监视器上的xmonad中表现得像工作区行为

限制辅助监视器中的窗口最大大小

vs2010哪个版本显示监视窗口