1

MaxWidthが設定されたWPFウィンドウがあるので、[最大化]ボタンを押すと、垂直方向に最大化されますが、水平方向には最大化されません。これは予想される動作です。ただし、ウィンドウは常に画面の左側にドッキングし(Windows 7、それが重要な場合)、最大化したときに水平方向の中央に配置する必要があります。次のStateChangedイベントハンドラーを追加しようとしましたが、何も実行されないようです。

private void wdw_mainWindow_StateChanged(object sender, EventArgs e)
{
    switch (WindowState)
    {
        case WindowState.Maximized:
            var windowWidth = (double)GetValue(WidthProperty);
            Left = (SystemParameters.PrimaryScreenWidth / 2) - (windowWidth / 2);
            break;
    }
}

ステートメントにブレークポイントを設定しましたswitchが、アプリの[最大化]ボタンを押すと、このコードが確実にヒットします。ただし、Left設定した後も、ウィンドウは画面の左側にしっかりと固定されたままです。どうしたの?

4

3 に答える 3

0

場所への登録も変更され、両方のイベントがロジックを実行して発生すると、うまくいきます。

于 2010-09-27T18:00:25.093 に答える
0

Windows 7 の Aero スナップは、ウィンドウを中央に配置しようとする試みを妨害している可能性があります。Aero スナップをオフにしてみて、まだ問題があるかどうかを確認してください。

http://www.sevenforums.com/tutorials/3069-aero-snap-turn-off.html

于 2010-09-27T17:48:50.890 に答える
0

windowWidth 呼び出し (NaN を返す) を次のように変更します。

   var windowWidth = this.ActualWidth;

注: これは XP SP3 でテストされました。現在、ここで使用できる Win7 マシンはありません。

申し訳ありませんが、WindowState が Maximized の場合、Win7 と同じ動作をします。おそらく最善の方法は、WindowState が Maximized に変更されたときにキャッチし、実際に WindowState を設定する代わりに、ウィンドウのサイズと位置を通常モードで設定することです。

于 2010-09-27T17:51:08.620 に答える