Silverlight网格布局定义中"*"和"自动"之间的区别是什么

use*_*687 19 silverlight silverlight-4.0

试图了解以下内容:

<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>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我解释上面代码段中*和Auto之间的区别吗?

谢谢

Ant*_*nes 25

Auto 表示为此列/行提供所包含项的大小.

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

实际上*相当于1*.它可以指定2*,3*...... N*为宽度或高度.Silverlight使用的算法是使用所有行的N的所有值的总和,*然后为每一行提供其可用空间的适当份额.例如:-

<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="2*" />
    <RowDefinition Height="3*" />
    <RowDefinition Height="Auto" />
</Grid.Definitions>
Run Code Online (Sandbox Code Playgroud)

这将首先确定第四行需要从其内容中有多高,并从完整可用高度中减去该行.高度的剩余部分将按*行划分.第一个获得1/6,第二个获得1/3,第三个获得可用高度的1/2.


Kel*_*sey 5

Auto将调整每列的大小,以便它可以容纳其中包含的任何内容。

*将用尽最大可用空间。当您有一个“剩余”列并且您想将其大小调整为剩余的任何内容时,最好使用它。

宽度未定义的示例网格。

场景一:

Column 1  | Column 2  | Column 3
----------------------------------
100 Width | Auto      | 200 Width
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第 2 列可以是 1 和放入其中的内容所需的任何值以及网格宽度可用的最大空间之间的任何值。如果将第 2 列更改为*整个网格上定义的宽度,它将填充剩余空间以实现网格的宽度。如果您将两列设置为*,并定义了网格宽度,那么它们将竞争剩余空间并将其分割。

通常,*如果我有一个设置为动态大小的控件,则我仅使用一列最大值(尽管这不是规则),以便该列将填充其他列留下的任何空间。如果您想要动态大小的控件具有特定大小的列,并且希望某些列保持固定并定义一列来扩展以填充控件的其余部分,那么这是很好的选择。 Auto不会对实际上不会填充剩余空间的空或低内容列执行此操作。

场景 2(第 3 列包含宽度为 100 的内容,网格总宽度为 800):

Column 1  | Column 2  | Column 3  | Column 4
--------------------------------------------
100 Width | 200 Width | Auto      | *
Run Code Online (Sandbox Code Playgroud)

然后,第 3 列的大小将仅为 100 宽度。第 4 列的宽度将调整为 400,以填充剩余空间。