在网格上左侧Horizo​​ntalAlignment

时间:2015-04-30 17:53:29

标签: c# wpf

我正在尝试在以下情况下使用Horizo​​ntalAlignment =“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控件无法在父级更改时调整所有子级的大小。我已经考虑过创建一个自定义面板,但这似乎比它的价值更麻烦。我觉得这里可以做的更简单。

感谢任何建议或想法。

2 个答案:

答案 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>