代码之家  ›  专栏  ›  技术社区  ›  greenoldman

如何使WPF网格可扩展?

  •  2
  • greenoldman  · 技术社区  · 14 年前

    请注意水平尺寸(宽度)。

    我有水平堆叠面板,可自动调整大小以占用实体空间(它“扩展”)。其中有网格(有3列)和滚动条。滚动条的宽度应该是固定的,但是网格应该扩展。我怎样才能强迫它去做呢?

    当前代码:

    <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,horizontallight=strech,每次网格的每一列只占用所需的空间(足以显示其内容),而不是整个可用空间。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Quartermeister    14 年前

    水平堆叠面板总是为其子级提供所需的宽度,因此它永远不会强制网格大于它想要的宽度。您需要使用不同类型的面板。一个选项是使用DockPanel,将滚动条停靠在右侧,让网格填充其余部分:

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

    另一个选项是使用网格,第二列使用Auto精确调整滚动条的大小,第一列默认为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>
    
        2
  •  1
  •   ChrisF toni    14 年前

    尝试

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

    在网格中定义的列和行可以利用 Star 按比例分配剩余空间。什么时候? 明星 选定为行或列的高度或宽度,该列或行接收剩余可用空间的加权比例。这与 Auto ,它根据列或行中内容的大小均匀分布空间。使用可扩展应用程序标记语言(XAML)时,此值表示为*或2*。

    Source