かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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です。