これに答えるのが少し遅れました (2 年以上) が、ねえ、決して遅いよりは遅いほうがいいですよね?
とにかく、私はこの正確な問題に遭遇し、列幅を保存してリセットするコードビハインドで解決することができました.
3 列のグリッドがあり、最初の列にいくつかのコンテンツ、2 番目の列に GridSplitter、3 番目の列に Expander があります。GridSplitter が移動された後、Expander を含む列の幅が Auto から固定サイズに変更されているようです。これにより、エキスパンダーが期待どおりに折りたたまれなくなりました。
そこで、プライベート変数と 2 つのイベント ハンドラーを追加しました。
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 にリセットします。
次に、エキスパンダーが展開されると、列を固定幅に戻して、折りたたむ前と同じ幅に展開します。
参照用の 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>