第 14 章的摘要。 絕對版面配置

Download Sample 下載範例

注意

這本書於2016年春季出版,此後一直沒有更新。 這本書中有很多仍然有價值,但一些材料已經過時,有些主題不再完全正確或完整。

如同 StackLayoutAbsoluteLayout 衍生自 Layout<View> 並繼承 Children 屬性。 AbsoluteLayout 會實作配置系統,要求程式設計人員指定其子系的位置,並選擇性地指定其大小。 這個位置是由子系的左上角所指定,相對於裝置獨立單位的 AbsoluteLayout 左上角。 AbsoluteLayout 也會實作比例定位和重設大小功能。

AbsoluteLayout 只有當程式設計人員可以對子系(例如 BoxView 元素)施加大小,或元素的大小不會影響其他子系的位置時,才應被視為特殊用途的配置系統。 HorizontalOptionsVerticalOptions 屬性對的AbsoluteLayout子系沒有任何影響。

本章也介紹附加可系結屬性的重要功能,允許在一個類別中定義的屬性(在此案例AbsoluteLayout中)附加至另一個類別(子系)。AbsoluteLayout

程序代碼中的 AbsoluteLayout

您可以使用標準方法將子系加入 至 ChildrenAbsoluteLayout集合,但也AbsoluteLayout提供擴充Add方法,讓您指定 RectangleAdd 另一PointAdd方法只需要 ,在此情況下,子系不受限制且大小本身。

您可以使用需要四個值的建構函式來建立值,前兩個Rectangle表示子系相對於其父系的位置,而第二個表示子系大小。 或者,您可以使用需要 PointSize 值的建構函式。

這些Add方法會在 AbsoluteDemo示範,它會使用Rectangle值來放置BoxView元素,以及LabelPoint使用 值的專案。

ChessboardFixed 範例使用 32 BoxView 個元素來建立棋盤模式。 程式會 BoxView 為元素提供35單位平方的硬式編碼大小。 AbsoluteLayout的 和 HorizontalOptionsVerticalOptions 已設定為 LayoutOptions.Center,導致 AbsoluteLayout 的總大小為280個單位平方。

附加的可系結屬性

您也可以使用靜態方法AbsoluteLayout.SetLayoutBounds,在 將 子系AbsoluteLayout加入至Children集合之後,選擇性地設定位置,並選擇性地設定子系的大小。 第一個自變數是子系;第二個 Rectangle 是物件。 您可以將寬度和高度值設定為 AbsoluteLayout.AutoSize 常數,以水準和/或垂直方式指定子系大小本身。

ChessboardDynamic 範例會使用 處理程式將 放入 AbsoluteLayoutSizeChangedContentView以呼叫AbsoluteLayout.SetLayoutBounds所有子系,使其盡可能大。

定義的附加可系結屬性AbsoluteLayout是名為AbsoluteLayout.LayoutBoundsPropertyBindableProperty靜態只讀欄位。 靜態 AbsoluteLayout.SetLayoutBounds 方法是藉由使用 SetValue 呼叫 子系 AbsoluteLayout.LayoutBoundsProperty來實作。 子系包含一個字典,其中附加的可系結屬性及其值會儲存在字典中。 在版面配置期間, AbsoluteLayout 可以藉由呼叫 AbsoluteLayout.GetLayoutBounds來實 GetValue 作 ,以取得該值。

比例重設大小和定位

AbsoluteLayout 會實作比例重設大小和定位功能。 類別會使用相關的靜態方法和 AbsoluteLayout.SetLayoutFlagsAbsoluteLayout.GetLayoutFlags定義第二個附加的可系結屬性 LayoutFlagsProperty

的 自變數 AbsoluteLayout.SetLayoutFlags 和 的傳回值 AbsoluteLayout.GetLayoutFlags 是 型 AbsoluteLayoutFlags別 的值,具有下列成員的列舉:

您可以將這些專案與 C# 位 OR 運算子結合。

設定這些旗標之後,配置界限結構的特定屬性 Rectangle 會按比例解譯子系。

WidthProportional設定旗標時,Width值為 1 表示子系的寬度與 AbsoluteLayout相同。 類似的方法用於高度。

比例定位會將大小納入考慮。 XProportional設定旗標時,版X面配置界限的 Rectangle 屬性會成正比。 值為 0 表示子系的左邊緣位於 的左邊緣AbsoluteLayout,但 1 的位置表示子系的右邊緣位於 的右邊緣,而不是如您所預期的那樣位於 的右邊緣AbsoluteLayoutAbsoluteLayoutX 0.5 的 屬性會將子系水準置中AbsoluteLayout

ChessboardProportional 範例示範如何使用比例重設大小和定位。

使用比例座標

有時候,比較容易想出比例定位的方式與 在 中 AbsoluteLayout實作的方式不同。 您可能偏好使用比例座標,其中 X 1的屬性會將子系左邊緣(而非右邊緣)與的右邊緣 AbsoluteLayout置中。

這個替代定位配置可以稱為「小數子座標」。您可以從小數子座標轉換成使用下列公式所需的 AbsoluteLayout 版面設定界限:

layoutBounds.X = (fractionalChildCoordinate.X / (1 - layoutBounds.Width))

layoutBounds.Y = (fractionalChildCoordinate.Y / (1 - layoutBounds.Height))

ProportionalCoordinateCalc 範例會示範這一點。

AbsoluteLayout 和 XAML

您可以在 XAML 中使用 AbsoluteLayout ,並使用 和AbsoluteLayout.LayoutFlags的屬性值AbsoluteLayout.LayoutBounds,在 的AbsoluteLayout子系上設定附加的可繫結屬性。 這在 AbsoluteXamlDemo ChessboardXaml 範例中示範。 後者的程式包含 32 BoxView 個元素,但使用包含 屬性的AbsoluteLayout.LayoutFlags隱含Style專案,將標記保持在最小值。

XAML 中由類別名稱、點和屬性名稱所組成的屬性一律附加的可系結屬性。

覆蓋

您可以使用 AbsoluteLayout 來建構 覆迭,其涵蓋頁面與其他控件,或許可以保護用戶與頁面上的一般控件互動。

SimpleOverlay 範例示範這項技術,也會示範 ProgressBar,其會顯示程式已完成工作的範圍。

一些樂趣

DotMatrixClock 範例會以仿真的 5x7 點矩陣顯示來顯示目前的時間。 每個點都是一個 BoxView (其中有 228 個)大小,並放置在 上 AbsoluteLayout

Triple screenshot of dot matrix clock

BouncingText 程式會以動畫顯示兩Label個物件,以水準和垂直方式跨螢幕彈跳。