WPF:切换主屏幕时保持窗口最大化

时间:2016-01-26 03:18:00

标签: c# wpf window maximize mainscreen

我希望保持窗口始终最大化,它在单个屏幕中完美运行。但是当我使用两个屏幕时(特别是当主屏幕改变时),我抓住分辨率改变事件并使其最大化,但它不起作用。我试图处理窗口的宽度和高度,它也不起作用。

这是我的运作方式:

  1. 使用一个小屏幕(1366 * 768),窗口最大化。
  2. 连接另一个大屏幕(1920 * 1080),设置为主屏幕(我们现在有两个屏幕)。然后窗口将以大屏幕显示,并且它没有最大化并保持大小1366 * 768(有时候它会被最大化,但并非总是如此)。
  3. 这是我的代码:

    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" />
    

1 个答案:

答案 0 :(得分:1)

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

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

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

我没有尝试重现您的问题,因此我无法确定这是否有效。这似乎值得一试。

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