Я бы реализовал это, используя Grid
со следующим макетом:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" x:Name="SecondColumn" />
<ColumnDefinition Width="Auto" x:Name="ThirdColumn" />
</Grid.ColumnDefinitions>
...
</Grid>
Теперь используя события PaneClosing
и PaneOpening
дляпросто измените значения кнопок Grid.Column
и Grid.Row
соответствующим образом.
Поэтому, когда панель открыта, я бы установил:
Grid.Row
в 0 для всех трех кнопок Grid.Column
до 0, 1, 2 соответственно SecondColumn.Width
и ThirdColumn.Width
до new GridLength(1, GridUnitType.Star)
И при закрытии:
Grid.Row
до 0, 1, 2 соответственно Grid.Column
до 0 для всех трех кнопок SecondColumn.Width
и ThirdColumn.Width
до new GridLength(0)
Альтернативным решением было бы использовать StackPanel
и просто переключать его Orientation
между Horizontal
и Vertical
, хотя это не поместило бы кнопки рядом друг с другом - чтобы добавить пробелы,вам также придется изменить Margin
кнопок.