展開選項
您可能注意到,HorizontalOptions和VerticalOptions屬性是複數形式,就好像有多個選項一樣。 這些屬性通常設定為LayoutOptions結構的靜态字段 - 另一個複數。
迄今為止的讨論集中在以下靜态隻讀LayoutOptions字段,它們傳回預定義的LayoutOptions值:
由View類預設建立的是LayoutOptions.Fill,這意味着視圖會填充它的容器。
正如你所看到的,當Labelis是一個垂直StackLayout的子元素時,Label上的VerticalOptions設定并沒有什麼不同。 StackLayout本身将孩子的身高限制在他們需要的高度,是以孩子沒有自由在該插槽内垂直移動。
準備好這個規則稍作修改!
LayoutOptions結構有四個尚未讨論的額外靜态隻讀字段:
LayoutOptions還定義了兩個名為Alignment和Expands的執行個體屬性。 由以AndExpand結尾的靜态字段傳回的LayoutOptions的四個執行個體都将Expands屬性設定為true。
此擴充屬性僅由StackLayout識别。 這對于管理頁面布局可能非常有用,但在第一次遇到時可能會造成混淆。 以下是Expandsto在垂直StackLayout中扮演角色的要求:
如果滿足這些條件,則StackLayout将在VerticalOptions設定為Expands等于true的所有子項之間平均配置設定額外的垂直空間。 這些孩子中的每一個在StackLayout中的插槽都比正常的要大。 小孩如何占用該插槽取決于LayoutOptions值的對齊設定:開始,中央,結束或填充。
這裡有一個名為VerticalOptionsDemo的程式,該程式使用反射來建立具有垂直StackLayout中所有可能的VerticalOptions設定的Label對象。 背景顔色和前景顔色交替出現,以便您可以看到每個标簽占據多少空間。 該程式使用語言內建查詢(LINQ)以更具視覺效果的方式對LayoutOptions結構的字段進行排序:
點選(此處)折疊或打開
你可能想稍微研究一下結果:

在藍色背景上帶有黃色文本的标簽視圖是那些将VerticalOptions屬性設定為LayoutOptions值而沒有設定展開标志的視圖。如果展開标志未在垂直StackLayout中的項目的LayoutOptions值上設定,則VerticalOptions設定将被忽略。正如你所看到的,标簽隻占用縱向StackLayout所需的垂直空間。
此StackLayout中的子級的總高度小于StackLayout的高度,是以StackLayout具有額外的空間。它包含四個将VerticalOptions屬性設定為LayoutOptions值并使用擴充标志設定的四個子項,是以這四個子項中的這些額外空間是平均配置設定的。
在這四種情況下 - 在黃色背景上帶有藍色文本的标簽視圖 - LayoutOptions值的對齊屬性訓示子對象在包含額外空間的區域内的對齊方式。第一個 - VerticalOptions屬性設定為LayoutOptions.StartAndExpand - 高于此額外空間。第二個(CenterAndExpand)位于額外空間的中間。第三個(EndAndExpand)低于額外空間。然而,在所有這三種情況下,标簽隻獲得盡可能多的垂直空間,如背景顔色所示。剩下的空間屬于StackLayout,它顯示頁面的背景顔色。
最後一個Label将其VerticalOptions屬性設定為LayoutOptions.FillAndExpand。在這種情況下,标簽會占用包含額外空間的整個插槽,如黃色背景的大面積所示。文本在這個領域的頂部;這是因為VerticalTextAlignment的預設設定是TextAlignment.Start。将其設定為其他内容以便在該區域内垂直放置文本。
LayoutOptions的Expands屬性僅在視圖是StackLayout的子項時才起作用。 在其他情況下,它被忽略。