网格行自动调整大小相对大小问题

时间:2016-09-21 09:14:30

标签: c# .net wpf wpf-controls

我是一名相对WPF的新手,我仍然试图了解其基本知识。我刚刚遇到一个网格大小调整问题,让我感到难过(似乎并不仅限于网格)。

问题是,如果我的网格具有相对大小的行/列,在另一个网格的行/列中,并且该行/列维度设置为自动,则子网格的相对大小似乎没有效果。

enter image description here

我对此xaml的期望是,内部网格列仍然相对大小(一个是另一个的宽度的3倍),即使它们位于父网格的自动大小列内。这是预期的行为,这是一个错误还是我遗漏了一些基本的东西?

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

   <Grid Background="DarkBlue">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Label BorderBrush="White"
               BorderThickness="1"
               Content="Cell 1"
               Foreground="White" />
        <Grid Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10*" />
                <ColumnDefinition Width="3*" />
            </Grid.ColumnDefinitions>
            <Label BorderBrush="White"
                   BorderThickness="1"
                   Content="Cell 2"
                   Foreground="White" />

            <Label Grid.Column="1"
                   BorderBrush="White"
                   BorderThickness="1"
                   Content="Cell 3"
                   Foreground="White" />
        </Grid>
    </Grid>

第二个网格表现奇怪的原因是因为第一个网格的列设置为“自动”。 因为它是自动的,它试图将其中的所有东西压缩到尽可能小 - 如果没有标签,这将是第二个网格的每列的宽度为0。加上标签的宽度使它们大致相等。

我认为它与WPF计算自动列/行中某些内容的宽度的顺序有关。

它首先要做的是注意第二个网格的自动值,即0.然后,它会将内容的宽度添加到此计算值 - 因为两个标签大小相同,这个得到两个相似的列。

我的解决方案删除了​​自动值,而是说第一个网格的第一列&#34;总宽度,你得到2 / 3rds的空间,另一列得到1/3&#34; - 它不是自动的,所以第二列不会以任何方式被压扁。

答案 1 :(得分:1)

似乎外部Grid列指示内部Grid应该具有哪个宽度。通过将列宽绑定到内部网格宽度来尝试反向测量顺序:<ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=InnerGrid}"/>

<Grid Background="DarkBlue">
    <Grid.Resources>
        <Style TargetType="Label">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="BorderBrush" Value="White"/>
            <Setter Property="BorderThickness" Value="1"/>
        </Style>
    </Grid.Resources>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=InnerGrid}"/>            
    </Grid.ColumnDefinitions>

    <Label Content="Cell 1" />

    <Grid Grid.Column="1" Name="InnerGrid" Background="DarkRed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10*" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>
        <Label Content="Cell 2.1" />
        <Label Grid.Column="1" Content="Cell 2.2" />
    </Grid>
</Grid>

调整大小后,只有第一列增加(见截图)

enter image description here