如何让 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
绑定到 Label
的 ActualWidth
。第 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>
我在 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
绑定到 Label
的 ActualWidth
。第 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>