问题描述
我有一个带有TabControl
的应用。在每个TabItem
上有一个DataGrid
。宽度和高度未设置,大小受边距控制,因此其大小与选项卡一起。
<TabItem Name="tbRails" Header="Rails">
<DataGrid x:Name="dgRails" Margin="5,30,5,5" ItemSource=...
一切正常,直到我需要在其中一个标签上放置CheckBox
为止。我们在TabItem
上只能生一个孩子,因此我添加了StackPanel
并放入了CheckBox
和DataGrid
。
<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,5" ItemSource=...
完成此操作后,数据网格将没有滚动条,并且不会响应鼠标滚轮。我可以单击该单元格,然后将其选中,然后向下箭头键直至其从底部消失。窗口的宽度大小与以前一样,但是似乎正在调整其高度以适合内容(大约2600行)。
以前有没有人看过这个,我们如何解决?我可以设置网格的高度,它的工作原理很好,但是它自身的大小不再匹配父级。
解决方法
使用Grid
作为面板而不是StackPanel
。堆栈面板将以正无穷大度量其子代,这不会限制其高度。换句话说,DataGrid
将按比例缩放以显示其所有记录,因此将没有滚动查看器。
使用Grid
和下面的RowDefinition
,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>