前言
作為微軟的UI框架,除了Winform以外,多數是以創建XAML文件的方式來編寫前端的頁面,盡管你也可以通過C#代碼來編寫你的用戶界面,與Xamarin.Forms相同,在MAUI上編寫XAML的聲明方式與其相同,重構了底層部分但又大部分繼承了原有的模式。
相比較其他的XAML聲明的UI框架,如:WPF、UWP、UnoPlatform、Avalonia 它們的聲明方式則各有不同。
XAML介紹
在MAUI中,創建一個XAML頁面, 主要包含兩個部分: XAML文件+CS文件。
XAML
<ContentPagex:Class="MauiApp5.MainPage"xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"><!-- -->
</ContentPage>
x:Class?: 代表XAML文件指向的 partial 類, XAML負責UI設計, CS類負責編寫業務邏輯。
xmlns?: 全名xamlnamespace, 代表聲明XAML命名空間
xmlns:x="..."?: 帶別名的命名xml空間, 通過別名可以訪問該命名空間下的對象(可訪問)
問題1: 帶別名的命名空間與不帶別名的命名空間有何區別?
首先,對于一個XAML文件而言,只能存在一個不帶別名的命名空間,這樣可以不用帶別名去訪問該命名空間下的對象,默認情況下,我們可以使用框架提供的各種UI對象,這是默認的,我們不需要顯示通過別名去訪問這些對象,對于我們自定義的命名空間,則可以通過別名去訪問。
默認命名空間下訪問對象
<Grid><StackLayout><Button/> <Label/><Image/></StackLayout></Grid>
聲明別名的方式去訪問對象
<m:ContentPagex:Class="MauiApp5.MainPage"xmlns:m="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"><m:Grid><m:StackLayout><m:Button/><m:Label/><m:Image/></m:StackLayout></m:Grid>
</m:ContentPage>
問題2: x:Class 指向的部分類有何要求?
CS partial 類與XAML 是同一個類,只是負責的工作不同。XAML 通常比等效代碼更簡潔且可讀,而C#代碼則可以處理復雜的條件判斷、邏輯處理。確保的是,該部分類需要和XAML的基類相同。
CS
public partial class MainPage : ContentPage
{ public MainPage(){InitializeComponent(); }
}
頁面介紹
MAUI框架內置了4種頁面類型, 以滿足不同的應用場景, 如下:
ContentPage
內容頁,通常用于定義頁面的視覺布局、嵌套顯示子元素等FlyoutPage
包含了一個顯示項的浮出控件頁和一個詳細信息頁, 封裝了用于側面導航以及操作的功能NavigationPage
提供了用于向前后導航的頁面TabbedPage
提供選項卡切換式的頁面,在移動設備中很常見。
以上這些頁面類型, 它們都是直接或者間接繼承于Page類, 各自實現了一些功能。
總結
本文主要介紹了MAUI中XAML的文件類說明以及提供的幾種頁面類型,后面的文章中會主要介紹XAML中的具體布局以及方法。