展开网格单元格,但停在listBox的内容上

时间:2019-08-15 19:23:00

标签: c# wpf xaml

我有一个WPF表单,其中包含一些文本字段和两个ListBox:

<TextBlock>Label</TextBlock>
<TextBox Text="{Binding Input}"/>
<TextBlock>List Label</TextBlock>
<ListBox ItemsSource="{Binding Items1}"/>
<TextBlock>Second List Label</TextBlock>
<ListBox ItemsSource="{Binding Items2}"/>

我希望两个ListBox垂直扩展以适合它们的容器,但是对于每个列表框,一旦不再需要其滚动条时就停止扩展。我最接近的是网格:

<Grid VerticalAlignment="Top">

  <Grid.RowDefinitions>
    <RowDefinition Height="auto" />
    <RowDefinition Height="*" MinHeight="40" />
    <RowDefinition Height="auto" />
    <RowDefinition Height="*" MinHeight="40" />
  </Grid.RowDefinitions>

  <StackPanel Grid.Row="0">
    <TextBlock>Label</TextBlock>
    <TextBox Text="{Binding Input}"/>
    <TextBlock>List Label</TextBlock>
  </StackPanel>
  <ListBox Grid.Row="1" ItemsSource="{Binding Items1}"/>
  <TextBlock Grid.Row="2">Second List Label</TextBlock>
  <ListBox Grid.Row="3" ItemsSource="{Binding Items2}"/>
</Grid>

但是,由于星号行高,因此列表框所占用的空间始终是相同的,因此,如果一个列表停止增长,则与其他列表匹配的其余高度将保留为底部的空白区域网格。

1 个答案:

答案 0 :(得分:0)

您想要的是DockPanel ...

<DockPanel >
    <TextBlock DockPanel.Dock="Top">Label</TextBlock>
    <TextBox Text="{Binding Input}" DockPanel.Dock="Top"/>
    <TextBlock DockPanel.Dock="Top">List Label</TextBlock>
    <ListBox Grid.Row="1" ItemsSource="{Binding Items1}" DockPanel.Dock="Top" MinHeight="40" MaxHeight="200"/>
    <TextBlock Grid.Row="2" DockPanel.Dock="Top">Second List Label</TextBlock>
    <ListBox Grid.Row="1" ItemsSource="{Binding Items2}" MinHeight="40"/>
</DockPanel>

这满足您的所有要求。容器已完全装满。当不再需要滚动条时,列表框将停止扩展。但是,如果第一个列表框中的项目过多,则第二个将完全消失。这就是为什么我在第一个列表框中输入最大高度的原因。

相关问题