回答这个问题有点晚(2 年以上),但是,嘿,迟到总比没有好,对吧?
无论如何,我遇到了这个确切的问题,并且能够通过一些代码隐藏来解决它以保存和重置列宽。
我有一个 3 列网格,第一列中有一些内容,第二列中有 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;
}
当 Expander 折叠时,我保存 Column2 的固定宽度(在后台某处从 Auto 自动更改),然后将宽度重置为 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>