Объединить расширитель и сетку (изменяемый размер расширителя) - PullRequest
15 голосов
/ 05 апреля 2011

Я хотел бы иметь что-то вроде экспандера с изменяемым размером. Моя основная идея была примерно такой:

<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 ]

20 голосов
/ 05 апреля 2011

Не уверен, что вы пытаетесь достичь, но я думаю, что концептуально 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 HorizontalAlignment должен быть установлен на Stretch, иначе он будет иметь нулевую ширину по умолчанию (конечно, все остальное, что зависит от ориентации, должно быть адаптировано как хорошо, но это просто)

HorizontalAlignment - это средство доступа к свойствам Microsoft .NET, которое на самом деле является свойством зависимости. Это частное свойство зависимости довольно часто имеет видимое значение «по умолчанию», устанавливаемое по-разному в подклассах элементов, в частности элементов управления. [...] Например, очевидное «значение по умолчанию» для HorizontalAlignment для элемента управления «Метка» будет иметь значение «Левый», даже если «Метка» наследует объект HorizontalAlignment непосредственно от FrameworkElement. Это связано с тем, что это значение было сброшено в стиле метки по умолчанию в шаблоне элемента управления стиля.

1 голос
/ 05 апреля 2011

Может быть, это поможет решить вашу проблему "разрушения столбца"

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;
}
...