x:Array-Markuperweiterung
Bietet allgemeine Unterstützung für Arrays von Objekten in XAML durch eine Markuperweiterung. Diese Eigenschaft entspricht dem x:ArrayExtension-XAML-Type in [MS-XAML].
Verwendung von XAML-Objektelementen
<x:Array Type="typeName">
arrayContents
</x:Array>
XAML-Werte
typeName |
Der Name des Typs, den das x:Array enthält. typeName wird möglicherweise (und ist oft) für einen XAML-Namespace vorangestellt, der die XAML-Typdefinitionen enthält. |
arrayContents |
Der Elementeinhalt, der der systeminternen ArrayExtension.Items-Eigenschaft zugewiesen wird. In der Regel werden diese Elemente angegeben wie ein oder mehrere Objektelemente, die innerhalb der x:Array-Starttags und -Endtags enthalten sind. Es wird erwartet, dass hier angegebene Objekte dem in typeName angegebenen XAML-Typ zugeordnet werden können. |
Hinweise
Type ist ein erforderliches Attribut für alle x:Array-Objektelemente. Ein Type-Parameterwert muss keine x:Type-Markuperweiterung verwenden. Der Kurzname des Typs ist ein XAML-Typ, der als Zeichenfolge angegeben werden kann.
In der Implementierung für .NET Framework-XAML-Dienste wird die Beziehung zwischen dem Eingabe-XAML-Typ und dem Ausgabe-CLR Type des erstellten Arrays durch den Dienstkontext für Markuperweiterungen beeinflusst. Der Ausgabe-Type ist der UnderlyingType des Eingabe-XAML-Typs, nachdem die erforderlichen XamlType auf Grundlage des XAML-Schemakontexts und des vom Kontext bereitgestellten IXamlTypeResolver-Diensts nachgeschlagen wurden.
Wenn er verarbeitet wird, wird dem Arrayinhalt ArrayExtension.Items systeminterne Eigenschaft zugewiesen. In der ArrayExtension- Implementierung wird dies durch ArrayExtension.Items dargestellt.
Bei der Implementierung von .NET Framework XAML Services wird die Handhabung dieser Markuperweiterung durch die ArrayExtension-Klasse definiert. ArrayExtension ist nicht versiegelt und kann als Basis für eine Markuperweiterung-Implementierung für einen benutzerdefinierten Arraytyp verwendet werden.
x:Array ist mehr für die allgemeine Spracherweiterbarkeit in XAML bestimmt. x:Array kann jedoch auch nützlich sein, um SAML-Werte mit bestimmten Eigenschaften anzugeben, die als strukturierten Eigenschafteninhalt XAML-unterstützte Auflistungen verwenden. Sie könnten z. B. den Inhalt einer IEnumerable-Eigenschaft mit einer x:Array-Verwendung angeben.
x:Array ist eine Markuperweiterung. Markuperweiterungen werden in der Regel implementiert, wenn Attributwerte mit Escapezeichen versehen werden müssen, damit diese nicht als literale Werte oder als Handlernamen betrachtet werden, und diese Anforderung eher global und nicht nur durch den Einsatz von Typkonvertern für bestimmte Typen oder Eigenschaften erfüllt werden soll. x:Array ist teilweise eine Ausnahme von dieser Regel, da x:Array keine alternative Attributwertbehandlung bereitstellt, sondern eine alternative Behandlung des inneren Textinhalts. Dieses Verhalten ermöglicht es, dass Typen, die möglicherweise nicht durch ein vorhandenes Inhaltsmodell unterstützt werden, in ein Array gruppiert werden und später darauf in Code-Behind verwiesen wird, indem auf das benannte Array zugegriffen wird. Sie können Array-Methoden aufrufen, um einzelne Arrayelemente abzurufen.
Alle Markuperweiterungen in XAML verwenden geschweifte Klammern ({,}) in der Attributsyntax. Dies ist die Konvention, durch die ein XAML-Prozessor erkennt, dass der Attributwert von einer Markuperweiterung verarbeitet werden muss. Weitere Informationen zu Markuperweiterungen finden Sie unter Typkonverter und Markuperweiterungen für XAML.
In XAML 2009 wird x:Array als Sprachprimitive definiert, und nicht als Markuperweiterung. Weitere Informationen finden Sie unter Integrierte Typen für häufige XAML-Sprachprimitive.
Hinweise zur WPF-Verwendung
Normalerweise handelt es sich bei den Objektelementen, die ein x:Array auffüllen, nicht um Elemente, die im WPF-XML-Namespace vorhanden sind. Außerdem erfordern diese Elemente eine Präfixzuordnung zu einem nicht standardmäßigen XAML-Namespace.
Unten folgt z. B. ein einfaches Array mit zwei Zeichenfolgen, wobei das sys-Präfix (sowie x) auf der Arrayebene definiert wird.
[xaml]
<x:Array Type="sys:String" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Hello</sys:String>
<sys:String>World</sys:String>
</x:Array>
Bei benutzerdefinierten Typen, die als Arrayelemente verwendet werden, muss die Klasse auch die entsprechenden Anforderungen unterstützen, damit sie in XAML als Objektelemente instanziiert werden können. Weitere Informationen finden Sie unter XAML- und benutzerdefinierte Klassen für WPF.
Siehe auch
Konzepte
Markuperweiterungen und WPF-XAML