Как сделать WPF Grid расширяемым? - PullRequest
2 голосов
/ 06 июля 2010

Пожалуйста, давайте сосредоточимся на горизонтальном размере (ширине).

У меня есть горизонтальная StackPanel, которая автоматически изменяет размеры, чтобы занимать все пространство (оно «расширяется»).В нем у меня есть Grid (с 3 столбцами) и полоса прокрутки.Ширина полосы прокрутки должна быть фиксированной, но Grid должен расширяться.Как я могу заставить это сделать это?

Текущий код:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
  <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

    <Grid.RowDefinitions>
      <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto"></ColumnDefinition>
      <ColumnDefinition Width="2"></ColumnDefinition>
      <ColumnDefinition></ColumnDefinition>

  </Grid.ColumnDefinitions>

  <StackPanel Orientation="Vertical" Grid.Column="0" HorizontalAlignment="Stretch">
    <Label Content="Label" HorizontalAlignment="Center" Name="label1" VerticalAlignment="Bottom" />
  </StackPanel>
  <GridSplitter DragCompleted="OnDragCompleted"  ShowsPreview="True" Name="gridsplitter1" Background="Red" Grid.Column="1" Grid.Row="0" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
  <StackPanel Orientation="Vertical" Grid.Column="2" HorizontalAlignment="Stretch">
    <Label Content="Label" HorizontalAlignment="Center" Name="label2" VerticalAlignment="Bottom" />
  </StackPanel>

  </Grid>

  <ScrollBar Name="scrollBarV" Orientation="Vertical" />

</StackPanel>

Независимо от того, что я делаю, ширина = авто, горизонтальное выравнивание = растяжение, каждый раз, когда каждый столбец сетки занимает толькотребуемое пространство (достаточное для отображения его содержимого), а не все доступное пространство.

Ответы [ 2 ]

4 голосов
/ 06 июля 2010

Горизонтальная StackPanel всегда будет давать своим дочерним элементам желаемую ширину, поэтому она никогда не заставит Grid быть больше, чем он хочет.Вам нужно будет использовать другой вид панели.Одним из вариантов является использование DockPanel, и закрепите ScrollBar вправо и дайте Grid заполнить все остальное:

<DockPanel HorizontalAlignment="Stretch">
    <ScrollBar DockPanel.Dock="Right" Name="scrollBarV" Orientation="Vertical" />
    <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        ...
    </Grid>
</DockPanel>

Другой вариант - используйте Grid со вторым столбцом, используя Auto для изменения размера доТочно ScrollBar и первый столбец слева по умолчанию 1 *, чтобы использовать оставшуюся часть пространства:

<Grid HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid Name="grid1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        ...
    </Grid>
    <ScrollBar Grid.Column="1" Name="scrollBarV" Orientation="Vertical" />
</Grid>
1 голос
/ 06 июля 2010

Попробуйте

<ColumnDefinition Width="*"></ColumnDefinition>

Столбцы и строки, определенные в сетке, могут использовать размеры Star для пропорционального распределения оставшегося пространства.Когда Звезда выбрана в качестве высоты или ширины строки или столбца, этот столбец или строка получает взвешенную долю оставшегося доступного пространства.Это отличается от Авто , который равномерно распределяет пространство в зависимости от размера содержимого в столбце или строке.Это значение выражается как * или 2 * при использовании расширяемого языка разметки приложений (XAML)

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...