Prismを使用したWPFアプリケーション開発で役に立つと思われる項目を一つのアプリケーションにまとめたものを作りました。今回は、ウインドウ位置保存について書いています。
動作環境:Win10, Visual Studio Community 2017, Prism V7.1.0.431, .NET4.5.2, Prism Template Pack, TraceListeners, WPFLocalizeExtension, OxyPlot
アプリの外観はこんな感じです。

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

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

イベントハンドラーに下記の様にウインドウの位置を保存しておきます。
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