次の方法で共有


チュートリアル: C# マークアップと Community Toolkit を使用して .NET MAUI アプリを作成する

.NET MAUI Community ToolkitC# マークアップを使用して、XAML なしで作成されたユーザー インターフェイスで .NET MAUI アプリを構築します。

はじめに

.NET MAUI Community Toolkit は、拡張機能、動作、アニメーション、その他のヘルパーのセットです。 その機能の 1 つである C# マークアップにより、C# コードでユーザー インターフェイス全体を作成できます。 このチュートリアルでは、C# マークアップを使用してユーザー インターフェイスを作成する Windows 用の .NET MAUI アプリを作成する方法について説明します。

環境のセットアップ

.NET MAUI 開発用に環境をまだ設定していない場合は、「Windows で .NET MAUI の使用を開始する」の手順に従ってください。

.NET MAUI プロジェクトの作成

Note

.NET MAUI プロジェクトの設定に既に慣れている場合は、次のセクションにスキップできます。

Visual Studio を起動し、スタート ウィンドウで [新しいプロジェクトを作成する] をクリックして新しいプロジェクトを作成します。

[新しいプロジェクトの作成] ウィンドウの [すべてのプロジェクトの種類] ドロップダウンで [MAUI] を選択し、[.NET MAUI アプリ] テンプレートを選択し、[次へ] ボタンをクリックします。

.NET MAUI App template.

次に、[新しいプロジェクトの構成] 画面で、プロジェクトに名前を付けて場所を選択し、[次へ] ボタンをクリックします。

最後の画面の [追加情報] で、[作成] ボタンをクリックします。

プロジェクトが作成され、その依存関係が復元されるまで待ちます。

Visual Studio ツール バーで、[Windows マシン] ボタンを押してアプリをビルドして実行します。 [Click me] ボタンをクリックし、ボタンの内容がクリック数で更新されることを確認します。

Windows 上の .NET MAUI アプリが期待どおりに動作していることを確認したので、MVVM Toolkit と C# マークアップ パッケージを統合できます。 次のセクションでは、これらのパッケージを新しいプロジェクトに追加します。

.NET MAUI Community Toolkit から C# マークアップを追加する

.NET MAUI アプリが Windows 上で実行されているので、いくつかの NuGet パッケージをプロジェクトに追加して、MVVM Toolkit および .NET MAUI Community ToolkitC# マークアップと統合しましょう。

ソリューション エクスプローラーでプロジェクトを右クリックし、コンテキスト メニューから [NuGet パッケージの管理...] をクリックします。

[NuGet パッケージ マネージャー] ウィンドウで、[参照] タブを選択して、CommunityToolkit.MVVM を検索します。

CommunityToolkit.MVVM package.

[インストール] をクリックして、CommunityToolkit.MVVM パッケージの最新の安定バージョンをプロジェクトに追加します。

次に、CommunityToolkit.Maui を検索します。

CommunityToolkit.Maui packages.

[インストール] をクリックして、CommunityToolkit.Maui.Markup パッケージの最新の安定バージョンをプロジェクトに追加します。

新しいパッケージのインストールが完了したら、[NuGet パッケージ マネージャー] ウィンドウを閉じます。

ViewModel をプロジェクトに追加する

MVVM Toolkit を使用して、シンプルな Model-View-ViewModel (MVVM) 実装を追加します。 まず、ビューとペアになる viewmodel (MainPage) を作成します。 プロジェクトを再度右クリックし、コンテキスト メニューから [追加 | クラス] を選択します。

表示された [新しい項目の追加] ウィンドウで、クラスに MainViewModel という名前を付けて [追加] をクリックします。

Adding a MainViewModel class to the project.

MainViewModel では、MVVM Toolkit の機能を活用します。 クラスの内容を、次のコードに置き換えます。

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 Toolkit でクラスの INotifyPropertyChanged 実装を生成できます。 .NET ソース ジェネレーターを機能させるには、MainViewModelpartial class としてマークする必要があります。 name プライベート フィールドの ObservableProperty 属性には、作成した部分クラスでの適切な INotifyPropertyChanged 実装を持つクラスの Name プロパティが追加されます。 OnNameChanging および OnNameChanged メソッドの追加はオプションですが、Name プロパティを変更する予定がある場合や既に変更済みの場合にカスタム ロジックを追加できます。

C# マークアップを使用して UI を構築する

C# マークアップを使用して UI を構築する場合、最初の手順は MauiProgram.csCreateMauiApp() メソッドを更新することです。 メソッドの内容を次のコードに置き換えます。

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

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

    return builder.Build();
}

ファイルの先頭に新しい using ステートメントを追加する必要もあります (using CommunityToolkit.Maui.Markup;)。 UseMauiCommunityToolkitMarkup() を呼び出すと、アプリに C# マークアップが追加され、XAML ではなく C# コードを使用して 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 で、クリック イベント ハンドラーを削除し、3 つのプライベート メンバーをクラスに追加します。

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

ViewModel プロパティは、UI をデータ バインディングするときに使用する MainViewModel クラスのインスタンスを作成します。 Row および Column 列挙型は、C# マークアップを使用して UI のレイアウトを定義するために使用されます。 これは、次の手順で定義する 1 つの行と 2 つの列を持つ単純な UI です。

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 ピクセルの 1 つの行と、絶対ピクセル値ではなくアスタリスク値を使用して定義された幅の 2 つの列が定義されます。 Input 列は常に Description 列の幅の 2 倍になります。 これらの定義に相当する XAML は次のようになります。

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

グリッドを作成するコードの残りの部分では、2 つの Children、1 つの Label、1 つの Entry を追加します。 TextRow、および Column プロパティは Label 要素で設定され、Entry は次のプロパティで作成されます。

プロパティ 説明
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 よりも合理化できる 1 つの例です。 ただし、スタイルを使用すると、再利用と継承が容易になります。

これで、アプリを実行する準備が整いました。 F5 キーを押し、プロジェクトをビルドして実行します。 アプリは次のスクリーンショットのようになります。

Run your .NET MAUI C# Markup app.

.NET MAUI を使用して Windows 上に最初の C# マークアップ アプリを作成しました。 C# マークアップでできることの詳細については、C # マークアップのドキュメントを参照してください。

.NET MAUI を学習するためのリソース

.NET MAUI Community Toolkit のドキュメント

C# マークアップのドキュメント