自动调整网格列以占用父级中的剩余空间
Posted
技术标签:
【中文标题】自动调整网格列以占用父级中的剩余空间【英文标题】:Autosizing a grid column to take up remaining space in parent 【发布时间】:2012-09-08 01:42:52 【问题描述】:在 WPF 中,我花了很长时间试图让网格正确调整大小。
我的网格有以下布局:
<ItemsControl HorizontalContentAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" />
<Label Grid.Column="1"/>
<TextBox Grid.Column="2"/>
<Button Grid.Column="3"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
问题在于 Width="Auto" 似乎将该列调整为内容的宽度,而不是填充父容器中的额外空间。这会使其余列全部未对齐,并且每行末尾都有难看的空白。
我可能遗漏了一些简单的东西,但我似乎找不到合适的方法来适合该列。
或者有更好的工作控制?
【问题讨论】:
【参考方案1】:经过一番折腾,我似乎找到了解决方案。
问题是:<ColumnDefinition Width="Auto"/>
这导致列适合内容。我改成:<ColumnDefinition />
无论内容大小如何,这都会使列适应父容器中剩余的空白空间。
【讨论】:
转换为Width="*"
。有关更多详细信息,请参阅@Blam 的答案
Mhh 在我的情况下似乎不起作用,Button 仍然只有 Text 一样大。
如果内容宽度大于列则不起作用。【参考方案2】:
*
表示填写或分享。如果您有两个*
,那么它们将平均共享宽度。
<ColumnDefinition Width="*"/>
【讨论】:
以上是关于自动调整网格列以占用父级中的剩余空间的主要内容,如果未能解决你的问题,请参考以下文章