sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

GridSplitter の配置状態の保存・復元

GridSplitter の配置状態の保存・復元

要点は、 WPFのGridSplitterで*でサイズ指定してるときにサイズの保存と復元をする方法 - かずきのBlog にあるとおりです。

例えば、ウィンドウの画面をつぎの3つで縦に分割するとします。

  • Grid *
  • GridSplitter 5px
  • Grid *

このとき、 2つの Grid のActualHeight をそのまま保存・復元すればよいです。
GridSplitter が分割する画面サイズの情報を保持しているわけではないので、 GridSplitter が領域を変更できる Grid 自身の ActualHeight or ActualWidth を直接操作します。

詳細

WPFのGridSplitterで*でサイズ指定してるときにサイズの保存と復元をする方法 - かずきのBlog の記事が、とてもわかりやすかったです。
それを読めば終わりなのですが、サンプルプログラムを作ったので、この記事は補足だけです。なお、コードの主要な部分は以下の2点だけです。

private void Save()
{
    var heights = SplitGrid.RowDefinitions.Select(p => p.ActualHeight).ToArray();

    settings.Default.GridRowHeightA = heights[0];
    settings.Default.GridRowHeightB = heights[2];
    settings.Default.Save();
}

private void Restore()
{
    var heightA = settings.Default.GridRowHeightA;
    var heightB = settings.Default.GridRowHeightB;

    SplitGrid.RowDefinitions[0].Height = new GridLength(heightA, GridUnitType.Star);
    SplitGrid.RowDefinitions[2].Height = new GridLength(heightB, GridUnitType.Star);
}

変更点

ウィンドウの配置状態の情報をどこに保存するべきか、という問題の解決方法に Settings.settings を利用しました。

f:id:shikaku_sh:20180122142519p:plain

サンプルのダウンロード

「SaveGridSplitterSample」です。

参考