我正在尝试在以下情况下使用HorizontalAlignment =“Left”:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Grid HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Background="Gray" Text="Small Text" TextWrapping="Wrap"/>
<TextBlock Grid.Column="1" Background="White" Text="This is a very large amount of text" TextWrapping="Wrap"/>
<TextBlock Grid.Column="2" Background="Gray" Text="Medium amount of text" TextWrapping="Wrap"/>
</Grid>
</Window>
我的目标是能够调整窗口大小,让三个TextBlocks按比例调整大小。这样可行,但是网格在最后一列的右侧放置了一些空格,当我尝试向最后一列调整大小时,列开始缩小。我希望这种缩小的行为,但我不希望它开始,直到最右边的列右边没有更多的空格。
我无法使用UniformGrid,因为文本长度可能会有所不同,并且我看到的其他内置WPF控件无法在父级更改时调整所有子级的大小。我已经考虑过创建一个自定义面板,但这似乎比它的价值更麻烦。我觉得这里可以做的更简单。
感谢任何建议或想法。
答案 0 :(得分:0)
您必须构建自己的自定义面板,并处理AvailableWidth
小于面板的孩子DesiredWidth
WPF中的面板布局(网格是一个面板)是一个两步过程,在第一轮中,Panel会对其子项进行迭代,并为他们提供面板AvailableWidth
。孩子们通过计算他们的DesiredWidth
来回应这个问题。
在第二轮中,小组根据DesiredWidth
安排孩子。在第二遍中,您可以访问所有子项(在您的情况下为TextBlocks)所需的宽度。如果它小于面板的可用宽度,您可以计算一个百分比来给出每个宽度,使它们看起来均匀收缩。
Here's a resource that shows how you can create your own custom panel
答案 1 :(得分:-2)
这个怎么样?
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>