我想将 a 限制Grid.ColumnDefinition
为最大宽度,但我不知道以编程方式执行此操作的宽度。考虑以下 XAML:
<Grid MaxWidth="150" HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="A" TextWrapping="Wrap" Background="LightGreen" />
<TextBlock Grid.Column="1" Text="B" TextWrapping="NoWrap" Background="LightSteelBlue" />
</Grid>
最多为 150 像素宽,Grid
但可以更小。第TextBlock
0 列中的Wrap
. 第TextBlock
1 列中的NoWrap
. 为了清晰起见,添加了背景颜色。结果:
现在让我们更改文本:
<TextBlock Grid.Column="0" Text="I'm long but I wrap" TextWrapping="Wrap" Background="LightGreen" />
<TextBlock Grid.Column="1" Text="I'm a long single line" TextWrapping="NoWrap" Background="LightSteelBlue" />
结果:
可换行文本不换行。似乎没有提供Grid
反馈TextBlock
。我想要的行为是让Grid
意识到它的列Auto
已经扩展超过了它自己的MaxWidth
属性并尝试缩小列中的内容。TextBlock
that isNoWrap
不会遵守这个要求,而withTextBlock
会Wrap
。因此输出将是:
我想不出任何*
调整大小的方法,因为我不希望网格占用这么多空间,除非需要内容。顺便说一句,实际Grid
有许多潜在大小的列。这是一个简短的例子。
[编辑]:我的解决方案是一个 hack,我不在乎,但它有效。我在我的模型上创建了一个属性,该属性确定可以出现在其他列中的内容,包括图像、边距、文本等。然后它从网格大小中减去以找到设置了 Wrap 的 TextBlock 的最大宽度。工作得很好,但很丑。