Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 4.0 “之间的区别是什么?”&引用;及;“自动”;在Silverlight栅格布局定义中_Silverlight 4.0_Silverlight - Fatal编程技术网

Silverlight 4.0 “之间的区别是什么?”&引用;及;“自动”;在Silverlight栅格布局定义中

Silverlight 4.0 “之间的区别是什么?”&引用;及;“自动”;在Silverlight栅格布局定义中,silverlight-4.0,silverlight,Silverlight 4.0,Silverlight,试图理解以下内容: <Grid Name="Root"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.Colum

试图理解以下内容:

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

有人能帮我解释一下上述代码片段中*和Auto之间的区别吗

感谢您(诚然来自Silverlight 2,但它仍然有效)提供了一些使用网格的示例,并给出了以下解释:

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

以及:

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


Auto
将使每个列都变大,以便它可以容纳其中包含的任何内容

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

未定义宽度的网格示例

情景1:

Column 1  | Column 2  | Column 3
----------------------------------
100 Width | Auto      | 200 Width
在这种情况下,第2列可以是介于1和放入其中的内容所需的任何内容以及网格宽度的最大可用空间之间的任意值。如果将第2列更改为
*
,并在整个网格上定义宽度,则需要填充剩余空间以达到网格的宽度。如果将两列设置为
*
,并定义了网格宽度,则它们将争夺剩余空间并将其拆分

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

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


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

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

凯尔西,谢谢你的回答。不幸的是,我只能将其中一个标记为答案。不幸的是,我只能标记一个作为答案。@user203687-没关系。您可以投票的答案数量没有限制:)
<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="2*" />
    <RowDefinition Height="3*" />
    <RowDefinition Height="Auto" />
</Grid.Definitions>