我是一名相对WPF的新手,我仍然试图了解其基本知识。我刚刚遇到一个网格大小调整问题,让我感到难过(似乎并不仅限于网格)。
问题是,如果我的网格具有相对大小的行/列,在另一个网格的行/列中,并且该行/列维度设置为自动,则子网格的相对大小似乎没有效果。
我对此xaml的期望是,内部网格列仍然相对大小(一个是另一个的宽度的3倍),即使它们位于父网格的自动大小列内。这是预期的行为,这是一个错误还是我遗漏了一些基本的东西?
谢谢!
答案 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>
调整大小后,只有第一列增加(见截图)