読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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