0

ウィンドウを常に最大化しておきたいのですが、単一の画面で完全に機能します。ただし、2つの画面を使用する場合(特にメイン画面が変更される場合)、解像度が変更されたイベントをキャッチして最大化しますが、機能しません。また、ウィンドウの幅と高さを処理しようとしましたが、どちらも機能しません。

ここに私がどのように操作するかがあります:

  1. 単一の小さな画面 (1366 * 768) を使用すると、ウィンドウが最大化されます。
  2. 別の大きな画面 (1920 * 1080) を接続します。これをメイン画面に設定します (現在は 2 つの画面があります)。すると、ウィンドウは大きな画面に表示され、最大化されず、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 に答える