Share via


XAML-Namespaces

XAML verwendet das XML-Attribut xmlns für Namespacedeklarationen. Es gibt zwei XAML-Namespacedeklarationen, die sich immer im Stammelement einer XAML-Datei befinden. Die erste definiert den Standardnamespace:

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

Der Standard-namespace gibt an, dass Elemente, die in der XAML-Datei ohne Präfix definiert sind, auf .NET Multiplatform App UI (.NET MAUI)-Klassen verweisen, wie ContentPage, Label und Button.

Die zweite Namespacedeklaration verwendet das x-Präfix:

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

XAML verwendet Präfixe, um nicht standardmäßige Namespaces zu deklarieren, wobei das Präfix beim Verweisen auf Typen innerhalb des Namespaces verwendet wird. Die x-Namenspacedeklaration gibt an, dass innerhalb von XAML definierte Elemente mit dem Präfix x für Elemente und Attribute verwendet werden, die XAML-inhärent sind (insbesondere die XAML-Spezifikation 2009).

In der folgenden Tabelle werden die von .NET MAUI unterstützten x-Konstrukte beschrieben:

Konstrukt Beschreibung
x:Arguments Gibt Konstruktorargumente für einen nicht standardmäßigen Konstruktor oder für eine Factorymethoden-Objektdeklaration an.
x:Class Gibt den Namespace- und Klassennamen für eine in XAML definierte Klasse an. Der Klassenname muss mit dem Klassennamen der CodeBehind-Datei übereinstimmen. Beachten Sie, dass dieses Konstrukt nur im Stammelement einer XAML-Datei angezeigt werden kann.
x:ClassModifier Gibt die Zugriffsebene für die generierte Klasse in der Assembly an.
x:DataType Gibt den Typ des Objekts an, an das das XAML-Element und untergeordnete Elemente gebunden wird.
x:FactoryMethod Gibt eine Factorymethode an, die zum Initialisieren eines Objekts verwendet werden kann.
x:FieldModifier Gibt die Zugriffsebene für generierte Felder für benannte XAML-Elemente an.
x:Key Gibt einen eindeutigen benutzerdefinierten Schlüssel für jede Ressource in einer ResourceDictionary an. Der Wert des Schlüssels wird verwendet, um die XAML-Ressource abzurufen, und wird normalerweise als Argument für die StaticResource-Markuperweiterung verwendet.
x:Name Gibt einen Laufzeitobjektnamen für das XAML-Element an. Die Einstellung x:Name ähnelt dem Deklarieren einer Variablen im Code.
x:TypeArguments Übergibt einschränkende Typargumente eines generischen Elements an den Konstruktor des generischen Typs.

Weitere Informationen zum Attribut x:ClassModifier finden Sie unter Klassenmodifizierer. Weitere Informationen zum Attribut x:DataType finden Sie unter Kompilierte Bindungen. Weitere Informationen zum Attribut x:FieldModifier finden Sie unter Feldmodifizierer. Weitere Informationen zu den Attributen x:Arguments und x:FactoryMethod finden Sie unter Argumente weitergeben. Weitere Informationen zum Attribut x:TypeArguments finden Sie unter Generika.

Hinweis

Zusätzlich zu den oben aufgeführten Konstrukten enthält .NET MAUI auch Markup-Erweiterungen, die über das Namespace-Präfix x verwendet werden können. Weitere Informationen finden Sie unter XAML-Markuperweiterung.

In XAML erben Namespacedeklarationen von übergeordnetem Element zu untergeordnetem Element. Daher erben beim Definieren eines Namespaces im Stammelement einer XAML-Datei alle Elemente innerhalb dieser Datei die Namespacedeklaration.

Deklarieren von Namespaces für Typen

Auf Typen kann in XAML verwiesen werden, indem ein XAML-Namespace mit einem Präfix deklariert wird, wobei die Namespacedeklaration den Namespacenamen der Common Language Runtime (CLR) und optional einen Assemblynamen angibt. Dies wird erreicht, indem Werte für die folgenden Schlüsselwörter (Keywords) innerhalb der Namespacedeklaration definiert werden:

  • clr-namespace: oder using: – der in der Assembly deklarierte CLR-Namespace, der die als XAML-Elemente darzustellenden Typen enthält. Dieses Schlüsselwort (Keyword) ist erforderlich.
  • assembly= – die Assembly, die den referenzierten CLR-Namespace enthält. Der einfache Name der Assembly ohne Dateierweiterung. Der Pfad zur Assembly sollte als Verweis im Projekt erstellt werden, das die XAML-Datei enthält, die auf die Assembly verweist. Dieses Schlüsselwort (Keyword) kann weggelassen werden, wenn sich der Clr-Namespace-Wert innerhalb derselben Assembly wie der App-Code befindet, der auf die Typen verweist.

Hinweis

Das Zeichen, das das clr-namespace- oder using-Token von seinem Wert trennt, ist ein Doppelpunkt, während das Zeichen, das das assembly-Token von seinem Wert trennt, ein Gleichheitszeichen ist. Das zwischen diesen beiden Token zu verwendende Zeichen ist ein Semikolon.

Im folgenden Beispiel wird das Deklarieren eines geschachtelten Namespace veranschaulicht:

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

Alternativ kann dies wie folgt geschrieben werden:

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

Das local-Präfix ist eine Konvention, die verwendet wird, um anzugeben, dass die Typen im Namespace lokal für die App sind. Wenn sich die Typen in einer anderen Assembly befinden, sollte der Assemblyname auch in der Namespacedeklaration definiert werden:

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

Das Namespacepräfix wird anschließend beim Deklarieren einer Instanz eines Typs aus einem importierten Namespace angegeben:

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

Informationen zum Definieren eines benutzerdefinierten Namespaceschemas finden Sie unter Benutzerdefinierte Namespaceschemas.