Отвечая на это немного поздно (2+ года), но, эй, лучше поздно, чем никогда, верно?
Так или иначе, я столкнулся с этой проблемой и смог решить ее с помощью некоторого кода, чтобы сохранить и сбросить ширину столбцов.
У меня есть трехколонная сетка, с некоторым содержимым в первом столбце, GridSplitter во втором столбце и Expander в третьем столбце. Похоже, происходит то, что после перемещения GridSplitter ширина столбца, содержащего Expander, изменяется с Auto на фиксированный размер. Это приводит к тому, что Expander больше не падает, как ожидалось.
Итак, я добавил приватную переменную и два обработчика событий:
private GridLength _columnWidth;
private void Expander_Expanded (object sender, RoutedEventArgs e)
{
// restore column fixed size saved in Collapse event
Column2.Width = _columnWidth;
}
private void Expander_Collapsed (object sender, RoutedEventArgs e)
{
// save current column width so we can restore when expander is expanded
_columnWidth = Column2.Width;
// reset column width to auto so the expander will collapse properly
Column2.Width = GridLength.Auto;
}
Когда расширитель свернут, я сохраняю фиксированную ширину Column2 (которая была изменена с Auto-magical на заднем фоне), а затем сбрасываю ширину на Auto.
Затем, когда расширитель расширяется, я восстанавливаю столбец обратно на фиксированную ширину, чтобы он расширялся до той же ширины, которая была до его свертывания.
Вот XAML для справки:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition x:Name="Column2" Width="Auto" />
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
<!-- some content goes here -->
</ScrollViewer>
<GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch"
Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="5"
Background="Black" />
<Expander Grid.Column="2" ExpandDirection="Left"
IsExpanded="True" Style="{StaticResource LeftExpander}"
Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
<Grid>
<TextBox TextWrapping="Wrap" Height="Auto" Margin="0 5 5 5" />
</Grid>
</Expander>
</Grid>