次の方法で共有


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: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:Argumentsx: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>

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