共用方式為


教學課程:使用 C# 標記和社群工具組建立 .NET MAUI 應用程式

使用 .NET MAUI 社群工具組C# 標記,以建立時不含 XAML 的使用者介面組建 .NET MAUI 應用程式。

簡介

.NET MAUI 社群工具組是一組延伸模組、行為、動畫和其他協助程式。 C# 標記是其中一種功能,可讓您完全以 C# 程式碼建立使用者介面。 在本教學課程中,您將瞭解如何為使用 C# 標記來建立使用者介面的 Windows 建立 .NET MAUI 應用程式。

設定環境

如果您尚未設定 .NET MAUI 的開發環境,請按照步驟開始使用 Windows 的 .NET MAUI

建立 .NET MAUI 專案

注意

如果您已經熟悉 .NET MAUI 專案的設定方法,可以跳到下一節。

啟動 Visual Studio,然後在起始視窗按一下 [建立新專案] 以建立新的專案。

「建立新專案」視窗的 [所有專案類型] 下拉式清單中選取 [MAUI],然後選取 .NET MAUI 應用程式 範本,再按一下 [下一步] 按鈕:

.NET MAUI 應用程式範本。

接下來,在「設定新專案」畫面上,為專案命名、選擇位置,然後按一下 [下一步] 按鈕。

在最後一個畫面「其他資訊」上,按一下 [建立] 按鈕。

等候專案建立,以及相依性還原。

在 Visual Studio 工具列中,按下 [Windows 電腦] 按鈕以組建並執行應用程式。 按一下 [按我] 按鈕,確認按鈕內容會隨著點擊次數而更新。

現在您已確認 Windows 上的 .NET MAUI 應用程式可如期運作,我們接著就可以整合 MVVM 工具組和 C# 標記套件。 在下一節,您會將這些套件新增到您的新專案。

從 .NET MAUI 社群工具組新增 C# 標記

現在您已在 Windows 執行 .NET MAUI 應用程式了,接著就將幾個 NuGet 套件新增至專案,以便與 .NET MAUI 社群工具組MVVM 工具組C# 標記整合。

「方案總管」中,以滑鼠右鍵按一下專案,然後選取操作功能表中的 [管理 NuGet 套件...]

「NuGet 套件管理員」視窗中,選取 [瀏覽] 索引標籤,然後搜尋「CommunityToolkit.MVVM」

CommunityToolkit.MVVM 套件。

按一下 [安裝],將 CommunityToolkit.MVVM 套件的最新穩定版本新增至專案。

接下來,搜尋 CommunityToolkit.Maui:

CommunityToolkit.Maui 套件。

按一下 [安裝],將 CommunityToolkit.Maui.Markup 套件的最新穩定版本新增至專案。

在新套件完成安裝之後,關閉「NuGet 套建管理員」視窗。

將 ViewModel 新增至專案

我們接著要以 MVVM 工具組新增簡單的 Model-View-ViewModel (MVVM) 實作。 我們先建立 viewmodel 以便與檢視 (MainPage) 配對。 再次以滑鼠右鍵按一下專案,並從操作功能表中選取 [新增 | 類別]

在顯示的「新增項目」視窗中,將類別命名為 MainViewModel,然後按一下 [新增]

將 MainViewModel 類別新增至專案。

我們接著要在 MainViewModel 運用 MVVM 工具組功能。 以下列程式碼取代 類別的內容:

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
using System.Diagnostics;

namespace MauiMarkupSample
{
    [INotifyPropertyChanged]
    public partial class MainViewModel
    {
        [ObservableProperty]
        private string name;
        partial void OnNameChanging(string value)
        {
            Debug.WriteLine($"Name is about to change to {value}");
        }
        partial void OnNameChanged(string value)
        {
            Debug.WriteLine($"Name has changed to {value}");
        }
    }
}

如果您已完成組建第一個適用於 Windows 的 .NET MAUI 應用程式教學課程,您就會瞭解上述程式碼的功能。 類別 MainViewModel 裝飾了 INotifyPropertyChanged 屬性,可讓 MVVM 工具組為類別產生 INotifyPropertyChanged 實作。 MainViewModel 必須標示為 partial class,.NET 來源產生器才能運作。 name 私有欄位的 ObservableProperty 屬性會針對在產生的部分類別含有正確 INotifyPropertyChanged 實作的類別新增 Name 屬性。 新增 OnNameChangingOnNameChanged 部分方法是選擇性步驟,但可讓您在 Name 屬性將變更或已變更時新增自訂邏輯。

使用 C# 標記組建 UI

使用 C# 標記組建 UI 時,第一個步驟是在 MauiProgram.cs 中更新 CreateMauiApp() 方法。 使用下列程式碼來取代 方法的內容:

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();

    builder
        .UseMauiApp<App>()
        .UseMauiCommunityToolkitMarkup();

    return builder.Build();
}

您還必須在檔案頂端新增新的 using 陳述式:using CommunityToolkit.Maui.Markup;。 呼叫 UseMauiCommunityToolkitMarkup() 會將 C# 標記的支援功能新增至應用程式,讓您以 C# 程式碼替代 XAML 來建構 UI。

轉譯 UI 時MainPage.xaml 檔案將不再使用,因此您可以移除 ContentPage 的內容。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiMarkupSample.MainPage">
</ContentPage>

MainPage.xaml.cs中,移除點擊事件處理常式,並將三個私有成員新增至類別:

private readonly MainViewModel ViewModel = new();
private enum Row { TextEntry }
private enum Column { Description, Input }

屬性 ViewModel 會建立對 UI 進行資料繫結時使用的類別 MainViewModel 執行個體。 RowColumn 列舉將用於定義含有 C# 標記的 UI 版面配置。 這是一種簡單的 UI,其中包含的單一列和兩個欄,將在下個步驟中定義。 您也需要將命名空間指示詞新增至檔案頂端: using static CommunityToolkit.Maui.Markup.GridRowsColumns;

由於 UI元素將以 C# 程式碼來定義,因此不需要 InitializeComponent() 方法。 移除呼叫,並取代為下列程式碼來建立 UI:

public MainPage()
{
    Content = new Grid
    {
        RowDefinitions = Rows.Define(
            (Row.TextEntry, 36)),

        ColumnDefinitions = Columns.Define(
            (Column.Description, Star),
            (Column.Input, Stars(2))),

        Children =
        {
            new Label()
                .Text("Customer name:")
                .Row(Row.TextEntry).Column(Column.Description),

            new Entry
            {
                Keyboard = Keyboard.Numeric,
                BackgroundColor = Colors.AliceBlue,
            }.Row(Row.TextEntry).Column(Column.Input)
                .FontSize(15)
                .Placeholder("Enter name")
                .TextColor(Colors.Black)
                .Height(44)
                .Margin(6, 6)
                .Bind(Entry.TextProperty, nameof(ViewModel.Name), BindingMode.TwoWay)
        }
    };
}

MainPage 建構函式中的新程式碼是使用 C# 標記來定義 UI。 Grid 已設為頁面的 Content。 新的網格定義了高度為 36 像素的列,以及使用 Star 值 (而不是絕對像素值) 定義寬度的兩個欄。 Input 欄的寬度一律是 Description 欄的兩倍。 這些定義的對等 XAML 是:

<Grid.RowDefinitions>
    <RowDefinition Height="36" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>

用於建立網格的其餘程式碼會新增兩個 Children、一個 Label 和一個 EntryTextRowColumn 屬性是設定在 Label 元素上,且 Entry 建立時含有下列屬性:

屬性 數值 Description
Row Row.TextEntry 定義列數。
Column Column.Input 定義欄數。
FontSize 15 設定字型大小。
Placeholder "Enter name" 設定元素空白時要顯示的預留位置文字。
TextColor Colors.Black 設定文字顏色。
Height 44 奢定元素高度。
Margin 6, 6 定義元素周圍的邊界。
Bind Entry.TextProperty, nameof(ViewModel.Name), BindingMode.TwoWay 使用雙向資料繫結,將元素的 Text 屬性繫結到檢視的 Name 屬性。

定義這些子元素的對等 XAML 是:

<Label Text="Customer name:"
       Grid.Row="0" Grid.Column="0" />
<Entry Grid.Row="1" Grid.Column="0"
       FontSize="15"
       Placeholder="Enter name"
       HeightRequest="44"
       Margin="6, 6"
       Text="{Binding Path=ViewModel.Name, Mode=TwoWay}" />

您可能已注意到上述標記並未設定 TextColor 屬性。 設定控制項的 TextColor 需要設定自訂樣式。 如詳細了解如何在 .NET MAUI 使用樣式,請參閱使用 XAML 設定應用程式樣式。 這個範例說明了以 C# 標記設定屬性比對等 XAML 更精簡。 不過,使用當中的樣式可讓重複使用和繼承更簡單。

您現在已可以開始執行應用程式了! 按 F5 鍵建置並執行專案。 應用程式現在看起來應該類似如下螢幕擷取畫面。

執行 .NET MAUI C# 標記應用程式。

您現在已使用 .NET MAUI 在 Windows 上建立第一個 C# 標記應用程式了。 若要深入瞭解如何使用 C# 標記,請參閱 C# 標記文件

.NET MAUI 學習資源

.NET MAUI 社群工具組文件

C# 標記文件