如何使WPF Grid可扩展?

时间:2010-07-06 12:15:15

标签: c# wpf user-interface

请让我们关注水平尺寸(宽度)。

我有水平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>

无论我做什么,width = auto,horizo​​ntalalignment = strech,每次网格的每一列只占用所需的空间(足以显示其内容),而不是整个可用空间。

2 个答案:

答案 0 :(得分:4)

水平StackPanel将始终为其子节点提供所需的宽度,因此它永远不会强制网格大于它想要的大小。您将需要使用不同类型的面板。一种选择是使用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 :(得分:1)

尝试

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

在网格中定义的列和行可以利用Star大小调整来按比例分配剩余空间。当选择Star作为行或列的高度或宽度时,该列或行将接收剩余可用空间的加权比例。这与Auto形成对比,后者根据列或行中内容的大小均匀分配空间。使用可扩展应用程序标记语言(XAML)时,此值表示为*或2 *

Source