1

我在 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 的值。我该如何解决这个问题?

4

2 回答 2

1

如果要换行,请使用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>
于 2017-06-23T03:44:16.617 回答
1

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

然后我们将 Column 1's绑定MinWidthActualWidth. Label第 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>
于 2017-06-23T15:44:15.530 回答