首页 > 解决方案 > StackPanel 干扰按边距调整大小

问题描述

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

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

这一切都很好,直到我需要CheckBox在其中一个标签上放一个。我们只能在 a 上生一个孩子,TabItem所以我添加了 aStackPanel并放入了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=...

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

有没有人见过这个,我们如何解决它?我可以设置网格的高度,它工作得很好,但它不再调整自己的大小来匹配父级。

标签: wpfxamldatagridstackpanel

解决方案


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

将 aGridRowDefinition下面的 s 一起使用,CheckBox将调整大小以适应其内容,DataGrid并将 . 中剩余的可用空间TabItem当此可用空间不足以显示所有记录时,它将自动显示滚动条。

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

推荐阅读