Объединить расширитель и сетку (изменяемый размер расширителя)
Я хотел бы иметь что-то вроде экспандера с изменяемым размером. Моя основная идея была примерно такой:
<Grid HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="2" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Expander Grid.Column="0" ExpandDirection="Right">
...
</Expander>
<GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
...
</Grid>
Проблема с этим: если я переместил разделитель сетки и свернул расширитель, я получил большую пустую область. Как заставить весь столбец развалиться? Или есть другой способ сделать расширитель "изменяемого размера"
2 ответа
Не уверен, что вы пытаетесь достичь, но я думаю, что концептуально Grid
должен быть частью Expander.Content
будет ли это работать для вас?
<Expander Header="Test" ExpandDirection="Right" HorizontalAlignment="Left" Background="LightBlue">
<Expander.Content>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="5"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Lorem ipsum dolor sit"/>
<GridSplitter Grid.Column="1" Width="5" ResizeBehavior="PreviousAndCurrent" ResizeDirection="Columns"/>
</Grid>
</Expander.Content>
</Expander>
Редактировать: убрал все триггеры из первого столбца, так как это казалось ненужным.
Кроме того: для этого, чтобы работать вертикально GridSplitter's HorizontalAlignment
должен быть установлен в Stretch
иначе он будет иметь нулевую ширину по умолчанию (конечно, все остальное, что зависит от ориентации, также должно быть адаптировано, но это просто)
HorizontalAlignment - это средство доступа к свойствам Microsoft .NET, которое на самом деле является свойством зависимости. Это частное свойство зависимости довольно часто имеет видимое значение "по умолчанию", устанавливаемое по-разному в подклассах элементов, в частности элементов управления. [...] Например, очевидное "значение по умолчанию" для HorizontalAlignment для элемента управления "Метка" будет иметь значение "Левый", даже если "Метка" наследует объект HorizontalAlignment непосредственно от FrameworkElement. Это связано с тем, что это значение было сброшено в стиле метки по умолчанию, в шаблоне элемента управления стиля.
Может быть, это поможет решить вашу проблему "разрушения колонны"
XAML:
Добавить в <Grid>
Name="expGrid"
и добавить в <Expander>
Collapsed="Expander_Collapsed"
Код C#:
private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
var colomnIndex = Grid.GetColumn(sender as Expander);
var colomn = expGrid.ColumnDefinitions[colomnIndex];
colomn.Width = GridLength.Auto;
}