如何让 WPF 网格列 width="*" 但也有一个动态的最小宽度,这样内容就不会被裁剪

How to have WPF Grid columns width="*" but also have a dynamic minimum width so content doesn't get cropped

我在 wpf 网格中有 3 列需要成比例

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="2*"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Border Grid.Column="0" Background="Yellow"></Border>
    <Border Grid.Column="2" Background="Yellow">
    </Border>
        <Border  Grid.Column="1" Background="Green">
            <Label Content="This is the Green Cell"></Label>
        </Border>
</Grid>

结果是

问题是绿色列中的文本被裁剪了。我可以通过设置 MinWidth = "150" 来解决这个问题。但是,绿色列的内容是动态的,所以我不能使用 150 的值。我该如何解决这个问题?

如果要换行,请使用 TextBlock 而不是 Label。标签不支持文字环绕。

<Border Grid.Column="1" Background="Green">
    <TextBlock TextWrapping="Wrap" Text="This is the Green CellThis is the Green CellThis is the Green CellThis is the Green Cell"/>
</Border>

我认为这可以满足您的要求:Label 是其边框内的水平对齐方式,因此它可以自然地调整大小以适应其想要的任何大小,而不是拉伸到其父级。我给了它一个半透明的背景,这样你就可以看到它实际占据了父元素的哪一部分。

然后我们将第 1 列的 MinWidth 绑定到 LabelActualWidth。第 1 列可以任意宽,但不能比 Label 窄。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition 
            Width="2*" 
            MinWidth="{Binding ActualWidth, ElementName=FixedContent}" 
            />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Border Grid.Column="0" Background="Yellow" />
    <Border Grid.Column="2" Background="Yellow" />
    <Border  Grid.Column="1" Background="Green">
        <Label 
            x:Name="FixedContent"
            HorizontalAlignment="Left"
            Content="This is the Green Cell" 
            Background="#882266aa"
            />
    </Border>
</Grid>