2010-05-21 56 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