c# - 如何使WPF网格可扩展?

标签 c# wpf user-interface

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

我有水平 StackPanel,它会自动调整大小以占据整个空间(它“扩展”)。其中有网格(有 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,horizo​​ntalalignment=strech,每次网格的每一列都只占用所需的空间(足以显示其内容),而不是整个可用空间。

最佳答案

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

另一个选项是使用网格,第二列使用 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>

关于c# - 如何使WPF网格可扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186064/

相关文章:

java - 如何限制用户只能输入数字?

javascript - 如果内容没有改变,如何防止 $.POST?

c# - asp.net MVC 4 通过不同的形式多次发布

c# - EndpointDispatcher 的 ContractFilter 不匹配?

c# - 在 C# StreamGeometry Xaml 标记中创建非描边区域

.net - 如何将 WPF 资源分配给其他资源标签

c# - C# 中的变音符号按字母顺序排列

c# - 如何使用 StreamReader 从 URI 读取文件?

wpf - 如何使用 MVVM 在 WPF 中绑定(bind)图钉位置?

flutter - (RenderViewport 不支持返回固有维度