XAML-Namespaces in Xamarin.Forms
XAML verwendet das XMLns-XML-Attribut für Namespacedeklarationen. In diesem Artikel wird die XAML-Namespacesyntax vorgestellt und das Deklarieren eines XAML-Namespaces für den Zugriff auf einen Typ veranschaulicht.
Übersicht
Es gibt zwei XAML-Namespacedeklarationen, die sich immer im Stammelement einer XAML-Datei befinden. Der erste definiert den Standardnamespace, wie im folgenden XAML-Codebeispiel dargestellt:
xmlns="http://xamarin.com/schemas/2014/forms"
Der Standardnamespace gibt an, dass in der XAML-Datei definierte Elemente ohne Präfix auf Klassen verweisen Xamarin.Forms , z ContentPage
. B. .
Die zweite Namespacedeklaration verwendet das x
Präfix, wie im folgenden XAML-Codebeispiel dargestellt:
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
Namespacedeklaration gibt an, dass elemente, die innerhalb des XAML-Codes mit einem Präfix x
definiert sind, für Elemente und Attribute verwendet werden, die in XAML systemintern sind (insbesondere die XAML-Spezifikation 2009).
In der folgenden Tabelle sind die namespaceattribute aufgeführt, die x
von Xamarin.Forms:
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: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 x:DataType
Attribut finden Sie unter Compiled Bindings. Weitere Informationen zum x:FieldModifier
Attribut finden Sie unter Feldmodifizierer. Weitere Informationen zu den x:Arguments
Und-Attributen 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 gehören auch Markuperweiterungen, Xamarin.Forms die über das x
Namespacepräfix genutzt werden können. Weitere Informationen finden Sie unter Verwenden von XAML-Markuperweiterungen.
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 Typen enthält, die als XAML-Elemente verfügbar gemacht werden sollen. 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 in der Projektdatei erstellt werden, die die XAML-Datei enthält, die auf die Assembly verweist. Dieses Schlüsselwort 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
using
Token vom Wert trennt, ein Doppelpunkt ist, 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: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 beim Deklarieren einer Instanz eines Typs aus einem importierten Namespace angegeben, 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 XAML Custom Namespace Schemas.
Zusammenfassung
In diesem Artikel wurde die XAML-Namespacesyntax eingeführt und veranschaulicht, wie sie einen XAML-Namespace für den Zugriff auf einen Typ deklarieren. 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.