Я пытаюсь написать базовое подтверждение концепции наличия сетки, с двумя столбцами с содержимым в них, а также с третьим столбцом, в котором есть только GridSplitter. Размер содержимого в крайнем левом столбце будет изменен с помощью GridSplitter, но я бы также хотел бы иметь некоторые кнопки свертывания и развертывания, которые уменьшают / увеличивают этот же столбец. В основном, как Solution Explorer в visual studio, который можно перетаскивать больше или просто откреплять, что приводит к его свертыванию.
Код ниже. LeftPanel - это то, что я пытаюсь оживить. Если я установил Width на LeftPanel, он анимируется, но больше не изменяет размеры автоматически, чтобы заполнить столбец сетки, когда я перетаскиваю GridSplitter вокруг. И когда я отключаю Width от LeftPanel или устанавливаю его на Auto, он анимируется, но больше не изменяет размеры с помощью GridSplitter.
Я посмотрел на эту запись о добавлении свойства DependencyProperty для прямой анимации GridColumn, но, опять же, перетаскивание GridSplitter нарушило бы его.
<UserControl.Resources>
<Storyboard x:Key="animShrink" x:Name="sbShrink">
<DoubleAnimation Storyboard.TargetName="leftPanel" Storyboard.TargetProperty="Width" To="50" Duration="0:0:2" />
</Storyboard>
<Storyboard x:Key="animGrow" x:Name="sbGrow">
<DoubleAnimation Storyboard.TargetName="leftPanel" Storyboard.TargetProperty="Width" To="200" Duration="0:0:2" />
</Storyboard>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="leftGridCol" Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Width="Auto" Margin="0,0,10,0" Background="Bisque" x:Name="leftPanel" >
<Button x:Name="btnShrink" Click="Button_Shrink" Height="20" VerticalAlignment="Top">Shrink</Button>
<Button x:Name="btnGrow" Click="Button_Grow" Height="20" Margin="0,30,0,0" VerticalAlignment="Top">Grow</Button>
</StackPanel>
<sdk:GridSplitter Grid.Column="0"></sdk:GridSplitter>
<StackPanel Grid.Column="2" Background="AliceBlue"></StackPanel>
</Grid>
Обработчики
private void Button_Grow(object sender, RoutedEventArgs e) {
sbGrow.Begin();
}
private void Button_Shrink(object sender, RoutedEventArgs e) {
sbShrink.Begin();
}