第 8 章的摘要。 程式碼和 XAML 搭配
注意
這本書於2016年春季出版,此後一直沒有更新。 這本書中有很多仍然有價值,但一些材料已經過時,有些主題不再完全正確或完整。
本章更深入地探索 XAML,特別是程式代碼和 XAML 的互動方式。
傳遞引數
在一般情況下,XAML 中具現化的類別必須具有公用無參數建構函式;結果對像是透過屬性設定初始化。 不過,還有兩種方式可以具現化和初始化物件。
雖然這些是一般用途的技術,但它們大多與MVVM檢視模型有關。
具有自變數的建構函式
ParameteredConstructorDemo 範例示範如何使用 x:Arguments
標記來指定建構函式自變數。 這些自變數必須以項目標記分隔,指出自變數的類型。 針對基本 .NET 數據類型,可以使用下列標籤:
x:Object
x:Boolean
x:Byte
x:Int16
x:Int32
x:Int64
x:Single
x:Double
x:Decimal
x:Char
x:String
x:TimeSpan
x:Array
x:DateTime
我可以從 XAML 呼叫方法嗎?
FactoryMethodDemo 範例示範如何使用 元素來指定叫用x:FactoryMethod
以建立物件的 Factory 方法。 這類 Factory 方法必須是公用和靜態的,而且必須建立其定義所在的型別物件。 (例如, Color.FromRgb
方法限定為 public 和 static,並傳回 類型 Color
為 的值。Factory 方法的自變數是在標記內 x:Arguments
指定。
x:Name 屬性
屬性 x:Name
允許在 XAML 中具現化的物件指定名稱。 這些名稱的規則與 C# 變數名稱的規則相同。 在建構函式中傳回 InitializeComponent
呼叫之後,程式代碼後置檔案可以參考這些名稱來存取對應的 XAML 元素。 這些名稱實際上會由 XAML 剖析器轉換成所產生部分類別中的私用字段。
XamlClock 範例示範x:Name
如何使用 ,讓程式代碼後置檔案讓 XAML 中定義的兩Label
個元素以目前的日期和時間進行更新。
同一個名稱不能用於相同頁面上的多個元素。 如果您使用 OnPlatform
為每個平臺建立平行命名物件,這是一個特別的問題。 PlatformSpecificLabele 範例會示範執行這類動作的更好方式。
自訂 XAML 型檢視
有數種方式可以避免在 XAML 中重複標記。 其中一個常見技術是建立衍生自 ContentView
的新 XAML 型類別。 此技術會在 ColorViewList 範例中示範。 類別 ColorView
衍生自 ContentView
以顯示特定色彩及其名稱,而 ColorViewListPage
類別會像往常一樣衍生自 ContentPage
,並明確建立17個 ColorView
實例。
ColorView
存取 XAML 中的類別需要另一個 XML 命名空間宣告,通常針對相同元件中的類別命名local
。
事件和處理程式
事件可以指派給 XAML 中的事件處理程式,但事件處理程式本身必須在程式碼後置檔案中實作。 XamlKeypad 示範如何在 XAML 中建置鍵盤使用者介面,以及如何在程式代碼後置檔案中實Clicked
作處理程式。
點選手勢
任何 View
物件都可以取得觸控輸入,並從該輸入產生事件。 類別 View
會 GestureRecognizers
定義集合屬性,該屬性可以包含衍生自 GestureRecognizer
的一或多個類別實例。
會產生TapGestureRecognizer
Tapped
事件。 MonkeyTap 程式示範如何將物件附加TapGestureRecognizer
至四BoxView
個元素,以建立模仿遊戲:
但猴子Tap計劃真的需要聲音。 (請參閱 下一章。