XAML-Namespaces in Xamarin.Forms

XAML verwendet das XML-Attribut xmlns für Namespacedeklarationen. In diesem Artikel wird die Syntax des XAML-Namespaces vorgestellt und veranschaulicht, wie sie einen XAML-Namespace deklarieren, um auf einen Typ zuzugreifen.

Übersicht

Es gibt zwei XAML-Namespacedeklarationen, die sich immer innerhalb des Stammelements einer XAML-Datei befinden. Der erste definiert den Standardnamespace, wie im folgenden XAML-Codebeispiel gezeigt:

xmlns="http://xamarin.com/schemas/2014/forms"

Der Standardnamespace gibt an, dass Elemente, die in der XAML-Datei ohne Präfix definiert sind, auf Xamarin.Forms Klassen verweisen, z. B ContentPage. .

Die zweite Namespacedeklaration verwendet das x Präfix, wie im folgenden XAML-Codebeispiel gezeigt:

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 Namespace verwendet wird. Die x Namespacedeklaration gibt an, dass Elemente, die im XAML-Code mit dem Präfix von x definiert sind, für Elemente und Attribute verwendet werden, die für XAML intrinsisch sind (insbesondere die XAML-Spezifikation 2009).

In der folgenden Tabelle werden die Namespaceattribute beschrieben, die x von unterstützt werden Xamarin.Forms:

Konstrukt BESCHREIBUNG
x:Arguments Gibt Konstruktorargumente für einen nicht standardmäßigen Konstruktor oder für eine Factory-Methodenobjektdeklaration an.
x:Class Gibt den Namespace und den Klassennamen für eine klasse an, die in XAML definiert ist. 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:DataType Gibt den Typ des Objekts an, an das das XAML-Element und die untergeordneten Elemente gebunden werden sollen.
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 einem an ResourceDictionary. Der Wert des Schlüssels wird zum Abrufen der XAML-Ressource verwendet und in der Regel 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 Gibt die generischen Typargumente für den Konstruktor eines generischen Typs an.

Weitere Informationen zum x:DataType Attribut finden Sie unter Kompilierte Bindungen. Weitere Informationen zum x:FieldModifier Attribut finden Sie unter Feldmodifizierer. Weitere Informationen zu den x:Arguments Attributen und x:FactoryMethod finden Sie unter Übergeben von Argumenten in XAML. Weitere Informationen zum x:TypeArguments Attribut finden Sie unter Generics in XAML mit Xamarin.Forms.

Hinweis

Zusätzlich zu den oben aufgeführten Namespaceattributen enthält auch Markuperweiterungen, Xamarin.Forms die über das x Namespacepräfix verwendet werden können. Weitere Informationen finden Sie unter Verwenden von XAML-Markuperweiterungen.

In XAML erben Namespacedeklarationen vom übergeordneten Element an ein untergeordnetes Element. Daher erben beim Definieren eines Namespace im Stammelement einer XAML-Datei alle Elemente in 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 CLR-Namespacenamen (Common Language Runtime) und optional einen Assemblynamen angibt. Dies wird erreicht, indem Werte für die folgenden Schlüsselwörter in der Namespacedeklaration definiert werden:

  • clr-namespace: oder using: – der CLR-Namespace, der in der Assembly deklariert ist, die die Typen enthält, die als XAML-Elemente verfügbar gemacht werden sollen. Diese Schlüsselwort (keyword) ist erforderlich.
  • assembly= – die Assembly, die den CLR-Namespace enthält, auf den verwiesen wird. Dieser Wert ist der Name der Assembly, ohne die Dateierweiterung. Der Pfad zur Assembly sollte als Verweis in der Projektdatei festgelegt werden, die die XAML-Datei enthält, die auf die Assembly verweist. Diese Schlüsselwort (keyword) kann weggelassen werden, wenn sich der Clr-namespace-Wert in derselben Assembly wie der Anwendungscode befindet, der auf die Typen verweist.

Beachten Sie, dass das Zeichen, das das clr-namespace Token oder using von seinem Wert trennt, ein Doppelpunkt ist, während das Zeichen, das das assembly Token von seinem Wert trennt, ein Gleichheitszeichen ist. Das Zeichen, das zwischen den beiden Token verwendet werden soll, ist ein Semikolon.

Das folgende Codebeispiel zeigt eine XAML-Namespacedeklaration:

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

Alternativ kann dies wie folgt geschrieben werden:

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

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

<ContentPage ... xmlns:behaviors="clr-namespace:Behaviors;assembly=BehaviorsLibrary" ...>
  ...
</ContentPage>

Das Namespacepräfix wird dann angegeben, wenn ein instance eines Typs aus einem importierten Namespace deklariert wird, wie im folgenden XAML-Codebeispiel veranschaulicht:

<ListView ...>
  <ListView.Behaviors>
    <behaviors:EventToCommandBehavior EventName="ItemSelected" ... />
  </ListView.Behaviors>
</ListView>

Informationen zum Definieren eines benutzerdefinierten Namespaceschemas finden Sie unter SCHEMAs für benutzerdefinierte XAML-Namespaces.

Zusammenfassung

In diesem Artikel wurde die Syntax des XAML-Namespaces vorgestellt und veranschaulicht, wie ein XAML-Namespace für den Zugriff auf einen Typ deklariert wird. XAML verwendet das xmlns XML-Attribut für Namespacedeklarationen, und Typen können in XAML durch Deklarieren eines XAML-Namespaces mit einem Präfix referenziert werden.