このお題で2個より多い時って言われて悩んだ結果です。
サイズを*で指定すれば、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です。