PrismWPFSample(10)ウインドウ位置保存
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