XAML 名前空間

XAML は名前空間宣言で xmlns XML 属性を使用します。 XAML ファイルのルート要素内には、常に 2 つの XAML 名前空間宣言があります。 1 つ目は、デフォルトの名前空間を定義します。

xmlns="http://schemas.microsoft.com/dotnet/2021/maui"

デフォルトの名前空間宣言は、プレフィックスのない XAML ファイル内で定義された要素が .NET マルチプラットフォーム アプリ UI (.NET MAUI) クラス (ContentPageLabelButton など) を参照するよう指定します。

2 番目の名前空間宣言では、x プレフィックスを使用します。

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

XAML では、プレフィックスを使用して既定以外の名前空間を宣言し、名前空間内の型を参照するときにプレフィックスが使用されます。 x 名前空間宣言では、x のプレフィックスが付いた XAML 内で定義された要素が、XAML に組み込まれている要素と属性 (具体的には 2009 XAML 仕様) に使用されるよう指定します。

次の表は、.NET MAUI でサポートされる x 構造体の概要を示しています。

構造体 説明
x:Arguments 既定以外のコンストラクターまたはファクトリ メソッド オブジェクト宣言のコンストラクター引数を指定します。
x:Class XAML で定義されているクラスの名前空間とクラス名を指定します。 クラス名は、コードビハインド ファイルのクラス名と一致する必要があります。 この構造体は、XAML ファイルのルート要素でのみ表示できることに注意してください。
x:DataType XAML 要素とその子要素がバインドするオブジェクトの型を指定します。
x:FactoryMethod オブジェクトの初期化に使用できるファクトリ メソッドを指定します。
x:FieldModifier 名前の付いた XAML 要素向けに生成されたフィールドのアクセス レベルを指定します。
x:Key ResourceDictionary 内の各リソースにユーザー定義の一意のキーを指定します。 キーの値は XAML リソースを取得するために使用され、通常は StaticResource マークアップ拡張の引数として使われます。
x:Name XAML 要素のランタイム オブジェクト名を指定します。 x:Name の設定は、コードで変数を宣言するのと似ています。
x:TypeArguments ジェネリック型の引数をジェネリック型のコンストラクターに指定します。

x:DataType 属性の詳細については、「コンパイル済みのバインディング」を参照してください。 x:FieldModifier 属性の詳細については、「フィールド修飾子」を参照してください。 x:Arguments および x:FactoryMethod 属性の詳細については、「引数を渡す」を参照してください。 x:TypeArguments 属性の詳細については、「ジェネリック」を参照してください。

構造体 説明
x:Arguments 既定以外のコンストラクターまたはファクトリ メソッド オブジェクト宣言のコンストラクター引数を指定します。
x:Class XAML で定義されているクラスの名前空間とクラス名を指定します。 クラス名は、コードビハインド ファイルのクラス名と一致する必要があります。 この構造体は、XAML ファイルのルート要素でのみ表示できることに注意してください。
x:ClassModifier アセンブリで生成されたクラスのアクセス レベルを指定します。
x:DataType XAML 要素とその子要素がバインドするオブジェクトの型を指定します。
x:FactoryMethod オブジェクトの初期化に使用できるファクトリ メソッドを指定します。
x:FieldModifier 名前の付いた XAML 要素向けに生成されたフィールドのアクセス レベルを指定します。
x:Key ResourceDictionary 内の各リソースにユーザー定義の一意のキーを指定します。 キーの値は XAML リソースを取得するために使用され、通常は StaticResource マークアップ拡張の引数として使われます。
x:Name XAML 要素のランタイム オブジェクト名を指定します。 x:Name の設定は、コードで変数を宣言するのと似ています。
x:TypeArguments ジェネリック型の引数をジェネリック型のコンストラクターに指定します。

x:ClassModifier 属性の詳細については、「クラス修飾子」を参照してください。 x:DataType 属性の詳細については、「コンパイル済みのバインディング」を参照してください。 x:FieldModifier 属性の詳細については、「フィールド修飾子」を参照してください。 x:Arguments および x:FactoryMethod 属性の詳細については、「引数を渡す」を参照してください。 x:TypeArguments 属性の詳細については、「ジェネリック」を参照してください。

上記の構造体に加えて、.NET MAUI には、x 名前空間プレフィックスを介して使用できるマークアップ拡張も含まれています。 詳細については、「XAML マークアップ拡張を使用する」を参照してください。

XAML では、名前空間宣言は親要素から子要素に継承されます。 たとえば、XAML ファイルのルート要素の名前空間を定義する場合、そのファイル内のすべての要素は名前空間の定義を継承します。

型の名前空間を宣言する

XAML で型を参照するには、プレフィックスを持つ XAML 名前空間を宣言し、名前空間宣言で共通言語ランタイム (CLR) 名前空間名を指定し、必要に応じてアセンブリ名を指定します。 これは、名前空間宣言内で次のキーワードの値を定義することによって実行できます。

  • clr-namespace: または using: – XAML 要素として公開する型が含まれ、アセンブリ内で宣言される CLR 名前空間。 このキーワードは必須です。
  • assembly= – 参照されている CLR 名前空間が含まれるアセンブリ。 この値は、ファイル拡張子のないアセンブリの名前です。 アセンブリへのパスは、アセンブリを参照する XAML ファイルを含むプロジェクトで参照として確立する必要があります。 このキーワードは、clr-namespace 値が同じアセンブリ内で型を参照するアプリ コードとして存在する場合は省略できます。

clr-namespace または using トークンとその値を区切る文字はコロン、assembly トークンとその値を区切る文字は等号です。 これら 2 つのトークンの間で使用する文字はセミコロンです。

次のコードの例は、XAML 名前空間宣言を示しています。

<ContentPage ... xmlns:local="clr-namespace:MyMauiApp">
  ...
</ContentPage>

また、次のように記述することもできます:

<ContentPage ... xmlns:local="using:MyMauiApp">
  ...
</ContentPage>

local プレフィックスは、名前空間内の型がアプリに対してローカルであることを示すために使用される規則です。 また、型が別のアセンブリ内にある場合は、アセンブリ名も名前空間宣言で定義する必要があります。

<ContentPage ... xmlns:controls="clr-namespace:Controls;assembly=MyControlLibrary" ...>
  ...
</ContentPage>

その後、インポートされた名前空間から型のインスタンスを宣言するときに、名前空間プレフィックスが指定されます。

<controls:Expander IsExpanded="True">
    ...
</controls:Expander>

カスタム名前空間スキーマの定義の詳細については、「カスタム名前空間スキーマ」を参照してください。