2010-05-21 70 views
18

“*”和“自动”之间的区别试图了解以下内容:是什么在Silverlight网格布局定义

<Grid Name="Root"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
</Grid> 

谁能帮助我在解释上面的代码片段*和汽车的区别?

感谢

回答

24

Auto表示为此列/行指定所包含项目的大小。

*表示与其他列/行共享剩余的可用空间,这些列/行也指定*

其实*相当于1*。对于宽度或高度,可以指定2*3* ... N*。 Silverlight使用的算法是使用*将所有行的N的所有值合计,然后为每行分配适当的可用空间份额。例如: -

<Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="2*" /> 
    <RowDefinition Height="3*" /> 
    <RowDefinition Height="Auto" /> 
</Grid.Definitions> 

这将首先确定第四排多高需要从它的内容,并认为。减去从完整速效高度。余下的高度将被划分为*行。第一个获得1/6,第二个获得1/3,第三个获得1/2的可用高度。

1

This page(诚然,从Silverlight 2中,但它仍然是有效的)具有利用与下面的说明电网的一些例子:在网格

对于每一行,我们有一个RowDefinition元素。所有行定义都包含在Grid.RowDefinitions元素中。我们的前两行是50像素高,第三行的高度设置为“*”。这表示该行将占用Grid中不受其他行占用的整个位置。

和:

另一个选项是设置宽度和/或高度,以“自动”。这样每个列/行都会改变其大小,以便与其中的控件的宽度/高度相匹配。例如:

+0

ChrisF,谢谢你的回答。不幸的是,我只能将其中一个标记为答案。 – user203687 2010-05-23 03:29:00

+0

@ user203687 - 没关系。对于可以投票的答案数量没有限制:) – ChrisF 2010-05-23 10:13:45

2

Auto将使每个列的大小,因此它可以适应任何包含它。

*将用尽可用空间的最大量。当你有一个“剩余”列时,最好使用你想调整大小的任何剩余部分。

示例宽度未定义的网格。

方案1:

Column 1 | Column 2 | Column 3 
---------------------------------- 
100 Width | Auto  | 200 Width 

在这种情况下,第2列可能是1和2之间的任何东西被放在它的内容要求和网格的宽度可以最大空间。如果第2列被更改为*,并且整个网格上定义的宽度将填充左侧空间以实现网格的宽度。如果您将两列设置为*,并且定义了网格宽度,则它们将争夺剩余空间并将其分开。

通常我只使用*最大只有一列(但这不是规则),如果我有一个控件设置为动态大小,以便该列将填充其他列留下的空间。如果您希望特定大小的列用于动态大小的控件,并希望某些列保持固定并定义一列以扩展以填充控件的其余部分,那就太好了。 Auto不会对空白或低内容列进行此操作,而这些列实际上并不会填满左侧空间。

方案2(第3栏第包含的内容是100宽度和网格具有800的总宽度):

Column 1 | Column 2 | Column 3 | Column 4 
-------------------------------------------- 
100 Width | 200 Width | Auto  | * 

列3将则只有尺寸为100宽。第4列的大小为400宽度以填充剩余空间。

+0

Kelsey,谢谢你的回答。不幸的是,我只能将其中一个标记为答案。 – user203687 2010-05-23 03:28:32