自动调整网格列以占用父级中的剩余空间

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

经过一番折腾,我似乎找到了解决方案。

问题是:&lt;ColumnDefinition Width="Auto"/&gt;

这导致列适合内容。我改成:&lt;ColumnDefinition /&gt;

无论内容大小如何,这都会使列适应父容器中剩余的空白空间。

【讨论】:

转换为Width="*"。有关更多详细信息,请参阅@Blam 的答案 Mhh 在我的情况下似乎不起作用,Button 仍然只有 Text 一样大。 如果内容宽度大于列则不起作用。【参考方案2】:

* 表示填写或分享。如果您有两个*,那么它们将平均共享宽度。

<ColumnDefinition Width="*"/>

【讨论】:

以上是关于自动调整网格列以占用父级中的剩余空间的主要内容,如果未能解决你的问题,请参考以下文章

在 UWP XAML 中自动调整网格列

WPF TextBlock 字体调整大小以填充网格中的可用空间

垂直对齐具有高度自动和最小高度设置的父级中的div?

响应式布局:调整 SVG 大小以填充其父级的剩余空间

父级中的Java方法占位符在子级中使用[重复]

父级中的div高度溢出[重复]