PrismWPFSample(10)ウインドウ位置保存

Prismを使用したWPFアプリケーション開発で役に立つと思われる項目を一つのアプリケーションにまとめたものを作りました。今回は、ウインドウ位置保存について書いています。

動作環境:Win10, Visual Studio Community 2017, Prism V7.1.0.431, .NET4.5.2, Prism Template Pack, TraceListeners, WPFLocalizeExtension, OxyPlot

アプリの外観はこんな感じです。

f:id:feynman911:20190628181528j:plain

準備

画面に位置を覚えておくためのプロパティを Settings.settings に設定します。

f:id:feynman911:20190804202208j:plain

ウインドウ位置の保存

アプリケーションを閉じる時に画面の位置を保存する為に、メインウィンドウにイベントを登録しておきます。
ウインドウのプロパティーを開いて、Closing をダブルクリックしてコードビハインドにイベントハンドラーを作ります。

f:id:feynman911:20190804183048j:plain

イベントハンドラーに下記の様にウインドウの位置を保存しておきます。

private void Window_Closing(
      object sender, System.ComponentModel.CancelEventArgs e)
{
    var settings = Properties.Settings.Default;
    settings.WindowMaximized = (WindowState == WindowState.Maximized);
    WindowState = WindowState.Normal; // 最大化解除
    settings.WindowLeft = Left;
    settings.WindowTop = Top;
    settings.WindowWidth = Width;
    settings.WindowHeight = Height;
    settings.Save();
}

ウインドウ位置の再現

アプリを起動した時に、ウインドウ位置を再現するために、コンストラクターに下記のように設定します。

public MainWindow()
{
    InitializeComponent();
    SetWindowPosition();
}
using System.Windows;

void SetWindowPosition()
{
    var settings = Properties.Settings.Default;

    if (settings.WindowLeft >= 0 &&
        (settings.WindowLeft + settings.WindowWidth) < SystemParameters.VirtualScreenWidth)
    { Left = settings.WindowLeft; }

    if (settings.WindowTop >= 0 &&
        (settings.WindowTop + settings.WindowHeight) < SystemParameters.VirtualScreenHeight)
    { Top = settings.WindowTop; }

    if (settings.WindowWidth > 0 &&
        settings.WindowWidth <= SystemParameters.WorkArea.Width)
    { Width = settings.WindowWidth; }

    if (settings.WindowHeight > 0 &&
        settings.WindowHeight <= SystemParameters.WorkArea.Height)
    { Height = settings.WindowHeight; }

    if (settings.WindowMaximized)
    {
        WindowState = WindowState.Maximized;
    }
}

以上で、アプリを終了した時のウインドウ位置を 次回起動した時に再現する事ができます。

作成したサンプルは次の場所に置いてありますので、詳しくはソースコードを見てもらえればと思います。
github.com