StackPanel 干扰按边距调整大小

StackPanel interferes with sizing by margin

我有一个 TabControl 的应用程序。每个 TabItem 上都有一个 DataGrid。未设置宽度和高度,大小由边距控制,因此它与选项卡一起调整大小。

<TabItem Name="tbRails" Header="Rails">
    <DataGrid x:Name="dgRails" Margin="5,30,5,5" ItemSource=...

一切正常,直到我需要在其中一个选项卡上放置 CheckBox。我们只能在 TabItem 上有一个 child 所以我添加了一个 StackPanel 并放入 CheckBoxDataGrid.

<TabItem Name="tbRails" Header="Rails">
    <StackPanel Name="pnlRails" Margin="10">
        <CheckBox Name="chkCollapseItems" Content="Collapse Items" Margin="15" Checked="chkCollapseItems_Checked" ... />
        <DataGrid  x:Name="dgRails" Margin="5,30,5,5" ItemSource=...

执行此操作后,数据网格没有滚动条并且不响应鼠标滚轮。我可以单击该单元格并将其选中,然后我可以向下箭头键直到它从底部消失。 window 的宽度大小与之前一样,但它似乎正在调整其高度以适应内容(大约 2600 行)。

有没有人以前见过这个问题,我们该如何解决?我可以设置网格的高度,它工作得很好,但它不再调整自己以匹配 parent.

使用 Grid 作为面板而不是 StackPanel。堆栈面板将以正无穷大测量其子项,这不会限制它们的高度。换句话说,DataGrid 将缩放以显示其所有记录,因此不会有滚动查看器。

Grid 与下面的 RowDefinition 一起使用,CheckBox 将调整大小以适合其内容,DataGrid 将获得 [=23] 的其余部分=]available space in the TabItem。当这个available space不足以显示所有记录时,它会自动显示滚动条。

<TabItem Name="tbRails" Header="Rails">
   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition Height="Auto"/>
         <RowDefinition/>
      </Grid.RowDefinitions>
      <CheckBox Grid.Row="0" Name="chkCollapseItems" Content="Collapse Items" Margin="15" Checked="chkCollapseItems_Checked" ... />
      <DataGrid Grid.Row="1"  x:Name="dgRails" Margin="5,30,5,5" ItemSource= ... />
   </Grid>
</TabItem>