2016-01-26 4 views
0

Я хочу, чтобы окно всегда было максимизировано, оно отлично работает на одном экране. Но когда я использую два экрана (особенно при изменении основного экрана), я улавливаю событие с измененным разрешением и увеличиваю его, но оно не работает. И я попытался разобраться с шириной и высотой окна, он тоже не работает.WPF: Максимальное увеличение окна при переключении главного экрана

вот как я действую:

  1. Используйте один маленький экран (1366 * 768), и окно максимизируется.
  2. Подключите другой большой экран (1920 * 1080), который настроен на главный экран (теперь у нас есть два экрана). Затем окно будет отображаться в большом, и оно не будет максимизировано и останется в размере 1366 * 768 (Wierdly иногда увеличивается, но не всегда).

вот мой код:

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

Вы упомянули, что он работает иногда, но не всегда. Возможно, вместо того, чтобы сразу реагировать на изменения настроек, вы должны поставить в очередь свой ответ с диспетчером, чтобы он работал после того, как все оседало.

В вашем методе SystemEvent_DisplaySettingsChanged, попробуйте изменить код следующим образом:

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

Я не пытался воспроизвести проблему, так что я не могу сказать наверняка, если это будет работать. Кажется, стоит попробовать.

Редактирование: сначала установить состояние окна в нормальное состояние, если оно будет считаться максимально возможным.

+0

Хорошая рекомендация, на самом деле я уже пробовал, и я очень уверен, что WindowState настроен на максимизацию после этого, он просто не действует. – McHo

+0

Возможно, свойство 'WindowState' уже настроено на' Maximized' (даже если окно не отображается максимально), поэтому настройка его на «Максимизированный» снова рано возвращается и не пытается на самом деле ничего делать. Вы пытались установить его на «Нормальный», а затем снова на «Максимизированный»? Я обновил свой ответ, чтобы показать, что я имею в виду. – Xavier

+0

Прохладный, он работает! Это точно так же, как вы сказали, он думал, что это уже сделано максимально. Большое вам спасибо. – McHo