XamlReader Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine XAML-Prozessor-Engine für die Analyse von XAML und das Erstellen entsprechender Objektstrukturen bereit.
public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
- Vererbung
- Attribute
Windows-Anforderungen
Gerätefamilie |
Windows 10 (eingeführt in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)
|
Beispiele
In diesem Beispiel wird eine einzelne Ellipse aus einer XAML-Zeichenfolge erstellt, die Load aufruft. Anschließend wird die erstellte, aber nicht verbundene Ellipse mit der Children-Auflistung eines Elements verbunden, das bereits in der ausgeführten UWP-App vorhanden war. Schließlich greift das Beispiel erneut auf die Ellipse an der Stelle zu, an der sie mithilfe einer Abfrage hinzugefügt wurde, und ändert eine ihrer Eigenschaften.
string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\"
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
where (item is FrameworkElement)
&& ((FrameworkElement) item).Name == "EllipseAdded"
select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);
Hinweise
XamlReader ist eine Hilfsprogrammklasse mit Methoden, die Objekte basierend auf einer Eingabe des XAML-Markups in Zeichenfolgenform erstellen. XamlReader stellt das Objektkonstruktionsverhalten bereit, das parallel zur Analyse von XAML durch den Windows-Runtime XAML-Parser und der Verwendung von XAML zum Definieren der Benutzeroberfläche einer UWP-App entspricht.
Das Analysieren der XAML-Eingabe mit XamlReader.Load generiert Laufzeitobjektstrukturen von Windows-Runtime-Objekten. Die Objektstruktur bietet eine Möglichkeit, diese Objekte zur Laufzeit zu programmieren, indem Sie Teile der vollständigen Struktur durchlaufen.
Es gibt mehrere Konzepte, die zu verstehen sind, wenn Sie Objekte aus XAML mit der XamlReader.Load-Methode erstellen:
- Die XAML-Inhaltszeichenfolge muss ein einzelnes Stammelement definieren.
- Die XAML-Inhaltszeichenfolge muss wohlgeformte XML und gültige XAML sein.
- Der XAML-Inhalt muss eine Standard-XML-Datei definieren. In der Regel ist dies das Windows-Runtime XAML-Vokabular, das durch identifiziert wird
http://schemas.microsoft.com/winfx/2006/xaml/presentation
. - Alle benutzerdefinierten Assemblys, auf die in einer XAML-Namespacezuordnung verwiesen wird, müssen bereits für die Anwendung verfügbar sein.
- Der XAML-Code sollte nicht versuchen, das x:Class-Attribut anzugeben oder XAML-definierte Attribute für Ereignishandler einzuschließen.
- Sie können FindName im allgemeinen XAML-Namescope nicht verwenden, um ein hinzugefügtes Laufzeitobjekt zu finden, aber Sie können innerhalb des spezifischen XAML-Namensskops des erstellten Objekts suchen. Weitere Informationen finden Sie unter XAML-Namescopes.
- Die Objekterstellungslogik kann das geladene XAML zur Laufzeit nicht in CodeBehind-Klassen integrieren. Wenn Sie Ereignishandler hinzufügen möchten, müssen Sie dies im Code tun, indem Sie auf Objekte verweisen, die aus der Objektstrukturstruktur des Load-Ergebnisses abgerufen wurden, und sprachspezifische Syntax zum Anfügen von Handlern verwenden (z. B
+=
. ). - Xaml-Inhalte müssen vorhanden sein. Sie können nicht die gesamte Struktur des Inhalts ersetzen. Sie müssen zumindest das ursprüngliche Stammelement beibehalten, damit die App-Modellauswirkungen einer geladenen XAML-Seite aktiv bleiben.
- Das objekt, das aus Load erstellt wird, kann nur einer Position in der primären Objektstruktur zugewiesen werden. Wenn Sie Objekte hinzufügen möchten, die aus identischem XAML zu verschiedenen Bereichen der primären Objektstruktur der Anwendung erstellt wurden, müssen Sie den XAML-Code mehrmals mithilfe der gleichen Eingabezeichenfolge analysieren und unterschiedliche Ziele für den Rückgabewert verwenden.
- Die verbleibende Struktur des primären Objekts muss eine entsprechende Eigenschaft unterstützen, die festgelegt werden soll.
Methoden
Load(String) |
Analysiert ein wohlgeformte XAML-Fragment, erstellt eine entsprechende Objektstruktur und gibt den Stamm der Objektstruktur zurück. |
LoadWithInitialTemplateValidation(String) |
Analysiert ein wohlgeformte XAML-Fragment erstellt eine entsprechende Objektstruktur und gibt den Stamm der Objektstruktur zurück. Führt auch die Ladezeitüberprüfung aller verknüpften Vorlagen durch. |