天天看點

第七章:XAML vs. code(1)

毫無疑問,C#是世界上有史以來最偉大的程式設計語言之一。 您可以在C#中編寫完整的Xamarin.Forms應用程式,并且可以想象,您已經發現C#非常适合Xamarin.Forms,您甚至沒有考慮過使用其他任何東西。

但保持開放的态度。 Xamarin.Forms為C#提供了一種替代方案,它在程式開發的某些方面具有一些獨特的優勢。 此替代方法是XAML(發音為“zammel”),表示可擴充應用程式标記語言。 像C#一樣,XAML是在微軟公司開發的,它隻比C#年輕幾歲。

顧名思義,XAML遵循XML(可擴充标記語言)的文法。 本書假設您熟悉XML的基本概念和文法。

從一般意義上講,XAML是一種用于執行個體化和初始化對象的聲明性标記語言。 這個定義可能看起來過于籠統,XAML确實非常靈活。 但是大多數真實世界的XAML已經被用于定義圖形程式設計環境特有的樹形結構可視化使用者界面。 基于XAML的使用者界面的曆史從Windows Presentation Foundation(WPF)開始,繼續Silverlight,Windows Phone 7和8以及Windows 8和10.這些XAML實作中的每一個都支援由 特定的平台。 同樣,Xamarin.Forms中的XAML實作支援由Xamarin.Forms定義的可視元素,如Label,BoxView,Frame,Button,StackLayout和ContentPage。

正如你所看到的,完全用代碼編寫的Xamarin.Forms應用程式通常定義其使用者界面在派生自ContentPage的類的構造函數中的初始外觀。 如果您選擇使用XAML,則标記通常會替換此構造函數代碼。 您會發現XAML提供了更簡潔優雅的使用者界面定義,并且具有更好地模仿頁面上可視元素的樹組織的可視化結構。

XAML通常比等效代碼更易于維護和修改。 因為XAML是XML,是以它也可能被删除:與相應的C#代碼相比,XAML更容易被軟體工具解析和編輯。 事實上,XAML背後的一個早期推動力是促程序式員和設計師之間的協作:設計師可以使用生成XAML的設計工具,而程式員專注于與标記互動的代碼。 雖然這個願景可能隻是很少被充分完善,但它肯定表明如何建構應用程式以适應XAML。 您使用XAML作為基礎邏輯的視覺和代碼。

然而,XAML超越了簡單的分工。 正如您将在下一章中看到的那樣,可以在XAML中正确定義綁定,将使用者界面對象與基礎資料連結起來。

在為Microsoft平台建立XAML時,一些開發人員使用Microsoft Blend等互動式設計工具,但許多其他人則更喜歡手寫XAML。 沒有設計工具可用于Xama?rin.Forms,是以手寫是唯一的選擇。 顯然,本書中的所有XAML示例都是手寫的。 但即使設計工具可用,手寫XAML的能力也是一項重要技能。

出于另一個原因,手寫XAML的前景可能會引起開發人員的驚愕:XML非常冗長。 但是,您幾乎可以立即看到XAML通常比等效的C#代碼更簡潔。 但是,XAML的實際功能隻是漸進式的,然而,直到第19章“集合視圖”,當您使用XAML為ListView中顯示的多個項目構模組化闆時才會完全顯現。

對于喜歡強類型語言(比如C#)的程式員來說,懷疑所有文本字元串都是标記語言是很自然的。 但是你會很快看到XAML是如何非常嚴格的程式設計代碼。 XAML檔案允許的大部分内容由組成Xamarin.Forms應用程式程式設計接口的類和屬性定義。 是以,您甚至可能會開始将XAML視為“強類型”标記語言。 XAML解析器基于底層API基礎結構以非常機械的方式完成其工作。 本章和下一章的目标之一就是揭開XAML的神秘面紗,闡明在解析XAML時會發生什麼。

然而,代碼和标記是非常不同的:代碼定義了一個程序,而标記定義了一個狀态。 XAML有幾種标記語言固有的缺陷:XAML沒有循環,沒有流量控制,沒有代數計算文法,也沒有事件處理程式。 但是,XAML定義了幾個有助于彌補這些缺陷的功能。 您将在未來的章節中看到許多這些功能。

如果你不想使用XAML,你不需要。 任何可以在XAML中完成的事情都可以在C#中完成。 但要小心:有時候,開發人員會對XAML有一點點品味,并會被帶走,并嘗試在XAML中做所有事情! 像往常一樣,最好的規則是“适用于所有事情”。許多最好的技術都是以互動方式組合代碼和XAML。

讓我們用一些代碼片段和等效的XAML開始這個探索,然後看看XAML和代碼如何在一個Xamarin.Forms應用程式中一起使用。