0

我想让窗口始终最大化,它可以在单个屏幕上完美运行。但是当我使用两个屏幕时(特别是当主屏幕发生变化时),我捕获了分辨率更改事件并将其最大化,但它不起作用。而且我试图处理窗口的宽度和高度,它也不起作用。

这是我的操作方式:

  1. 使用单个小屏幕(1366 * 768),窗口最大化。
  2. 再接一个大屏(1920 * 1080),设置为主屏(我们现在有两个屏),然后窗口会以大屏显示,不最大化,保持1366*768的大小(奇怪的是,它有时会最大化,但并非总是如此)。

这是我的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.WindowState = WindowState.Maximized;
        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
    }

    //this method catch the resolution changed event
    private void SystemEvent_DisplaySettingsChanged(object sender, EventsArgs e)
    {            
        WindowState = WindowState.Maximized;
    }
}

窗口 xaml 代码:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        ResizeMode="CanMinimize"
        SizeToContent="Manual"
        WindowStartupLocation="CenterScreen" />
4

1 回答 1

1

您提到它有时会起作用,但并非总是如此。也许不是立即对设置更改做出反应,而是应该将您的响应与调度程序排队,以便它在事情稳定后运行。

在您的SystemEvent_DisplaySettingsChanged方法中,尝试将代码更改为:

WindowState = WindowState.Normal;
Dispatcher.BeginInvoke(new Action(() => WindowState = WindowState.Maximized), DispatcherPriority.Background);

我没有尝试重现您的问题,所以我不能确定这是否可行。不过似乎值得一试。

编辑:首先将窗口状态设置为正常,以防它认为它已经最大化。

于 2016-01-26T03:32:57.937 回答