返回

WPF 窗口如何在当前显示屏上最大化?

windows

如何在当前屏幕上最大化 WPF 窗口

当你使用 WPF 编写无窗口应用程序时,你可能会遇到这样的情况:当你尝试最大化窗口时,它总是会在你的主显示器上最大化。然而,你可能希望窗口在你运行应用程序所在的任何显示器上最大化。

问题

为什么 WPF 窗口总是会最大化到主显示器上?

原因

默认情况下,WPF 窗口使用 System.Windows.Forms.Screen.PrimaryScreen 来确定窗口的最大化边界。而 System.Windows.Forms.Screen.PrimaryScreen 总会返回主显示器,因此窗口总是会最大化到主显示器上。

解决方案

为了在当前屏幕上最大化窗口,你需要获取当前屏幕的显示边界,然后手动设置窗口的左上角坐标和大小以匹配显示边界的左上角坐标和大小。

以下是如何使用 C# 实现此解决方案的步骤:

  1. 获取当前屏幕的显示边界。
  2. 设置窗口的左上角坐标,使其与显示边界的左上角坐标匹配。
  3. 设置窗口的宽度和高度,使其与显示边界的宽度和高度匹配。

代码示例

以下是一个使用上述步骤实现此解决方案的 C# 代码示例:

private void titleBarThumb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var currentScreen = System.Windows.Forms.Screen.FromHandle(new System.Windows.Interop.WindowInteropHelper(this).Handle);
    this.Left = currentScreen.Bounds.Left;
    this.Top = currentScreen.Bounds.Top;
    this.Width = currentScreen.Bounds.Width;
    this.Height = currentScreen.Bounds.Height;
}

好处

使用此解决方案,你的 WPF 窗口现在将在你运行应用程序所在的任何显示器上最大化。这让你可以充分利用你的多显示器设置,并在每个显示器上创建无缝且高效的工作空间。

常见问题解答

1. 为什么我不能使用 WindowState = WindowState.Maximized 来最大化窗口?

WindowState = WindowState.Maximized 会将窗口最大化到主显示器上。如果你希望窗口在当前显示器上最大化,则需要手动设置窗口的边界,如上文所述。

2. 如何获取当前屏幕的显示边界?

可以使用 System.Windows.Forms.Screen.FromHandle 方法获取当前屏幕的显示边界。该方法接受一个窗口句柄作为参数,并返回与该窗口句柄关联的屏幕。

3. 如何设置窗口的左上角坐标?

可以使用 LeftTop 属性设置窗口的左上角坐标。

4. 如何设置窗口的宽度和高度?

可以使用 WidthHeight 属性设置窗口的宽度和高度。

5. 此解决方案是否适用于所有 WPF 应用程序?

此解决方案适用于所有无窗口的 WPF 应用程序。如果你的 WPF 应用程序具有标题栏或边框,则可能需要调整代码以适应额外的控件。