かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

WPFのGridSplitterで*でサイズ指定してるときにサイズの保存と復元をする方法

このお題で2個より多い時って言われて悩んだ結果です。

blog.okazuki.jp

サイズを*で指定すれば、GridSplitterは画面のサイズを超えてリサイズされないという特性をもちます。これでOK。じゃぁあとは保存と復元をどうやるかですが、こんな感じでいけます。

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.StoreWidths = this.LayoutRoot.ColumnDefinitions.Select(x => x.ActualWidth).ToArray();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    for (int i = 0; i < this.StoreWidths.Length; i++)
    {
        if (i % 2 == 1)
        {
            // GridSplitter
            continue;
        }

        this.LayoutRoot.ColumnDefinitions[i].Width = new GridLength(this.StoreWidths[i], GridUnitType.Star);
    }
}

今回は奇数個の列にGridSplitterがあるという想定で、そこの列以外を以前と同じ比率(ピクセル数とStar)で復元してやるとOK。保存時は素直にActualWidthをとっておけばOKです。