XamlReader Klasse

Definition

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Vererbung
XamlReader

Beispiele

Im folgenden Beispiel wird eine Button mithilfe der XamlWriter -Klasse in eine Zeichenfolge konvertiert. Die Zeichenfolge wird dann mithilfe der statischen Load Methode für die XamlReader -Klasse wieder in ein Button geladen.

// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";

// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);

// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"

' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)

' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)

Hinweise

Die synchronen Load Methoden sind statisch, aber die asynchronen LoadAsync Methoden sind nicht statisch und erfordern eine instance der XamlReader -Klasse.

Die Ausgabe der Load Methoden ist ein einzelnes Objekt, das das Stammobjekt einer erstellten Objektstruktur oder eines Objektgraphen darstellt. Objektgraphen, die von XamlReader erstellt werden, werden in der Regel zur Laufzeit der vorhandenen Objektstruktur einer WPF-Anwendung hinzugefügt. Andernfalls wird das neue Objektdiagramm für Zwecke des WPF-Anwendungsmodells als getrennt betrachtet. Dies bedeutet, dass es nicht gerendert wird und nicht mithilfe einer der Objektstrukturtechniken zugegriffen werden kann, die auf die Standard Objektstruktur der WPF-Anwendung angewendet werden (z. B. die APIs FindName, LogicalTreeHelper, VisualTreeHelper). Weitere Informationen zu Objektstrukturkonzepten finden Sie unter Strukturen in WPF.

XamlReader unterstützt die folgenden primären Szenarien:

  • Klonen/Objektfactory: Ohne zusätzliche Mechanismen kann ein Verweistyp in der Regel nicht an mehr als einer Position in einer WPF-Objektstruktur eingeschlossen werden. (Beispiele für zusätzliche Mechanismen, die Unterstützung für die Freigabe oder Wiederverwendung in WPF bieten, sind Objekte, die auf Freezablebasieren, oder Unterstützung für häufig gemeinsam nutzbare Objekte, z Brush . B. die als Element aus einem ResourceDictionaryreferenziert werden.) Eine Möglichkeit zum Klonen eines Objekts, das sich bereits in der Objektstruktur befindet, besteht darin, das Objekt mithilfe von XamlWriter.Savezu serialisieren. Anschließend verwenden Sie die serialisierte Zeichenfolge als Eingabe für einen Aufruf von Load, mit einem Stream oder XmlReader als Vermittler.

  • Erstellen von Objekten basierend auf Just-in-Time-Informationen: Es gibt häufig andere Möglichkeiten, den Zustand vorhandener Objekte durch späte Bindung oder vom Benutzer bereitgestellte Eingabe zu ändern. Sie können z. B. denselben Wert verwenden, um mehrere Eigenschaften festzulegen, oder sie können die Datenbindung verwenden. Wenn Sie jedoch ein Szenario haben, in dem selbst der Typ des zu erstellenden Objekts nur zur Laufzeit oder mit Benutzerinteraktion bestimmt werden kann, ist das Erstellen eines solchen Objekts durch Erstellen einer Zeichenfolge für Load die Eingabe häufig eine nützliche Methode.

  • Verwenden vorhandener Ressourcentechniken: Der Stream Typ wird häufig in anderen Frameworks oder Technologien zum Übertragen von Daten oder Objekten über Anwendungsgrenzen hinweg oder in ähnlichen Situationen verwendet. Anschließend können Sie die Stream Techniken verwenden, um XAML-formatierte Daten zu speichern oder abzurufen, die Sie schließlich zum Erstellen eines Objekts als Teil Ihrer Anwendung verwenden.

  • Korrigierte Dokumente: Ihre Anwendung lädt möglicherweise lokale oder heruntergeladene XPS-Dokumente zur Aufnahme in eine WPF-Anwendungsobjektstruktur und -benutzeroberfläche.

Hinweis

In dieser Dokumentation wird manchmal ein Objektdiagramm im Gegensatz zu einer Objektstruktur beschrieben. In den Laufzeitobjektbeziehungen einer WPF-Laufzeitanwendung ist nicht immer eine strikte Über-/Untergeordnete Beziehung vorhanden, daher ist ein Objektdiagramm eine weiter anwendbare Terminologie. Da WPF jedoch auch zwei verschiedene Strukturkonzeptualisierungs-APIs (LogicalTreeHelper, ) enthält, VisualTreeHelpergilt die Strukturmetapher weiterhin angemessen für die meisten realen Fälle in WPF. Aus XAML-Sprachperspektive ist das Objektdiagramm jedoch häufig die beste Möglichkeit, um darüber nachzudenken, wie Objekte aus XAML erstellt werden, da die XAML-Sprache selbst nicht notwendigerweise Hilfsklassenmethoden angibt, die die Beziehungen wieder stärker in eine Struktur bringen.

Codezugriffssicherheit, Loose XAML und XamlReader

XAML ist eine Markupsprache, die Objektinstanziierung und -ausführung direkt darstellt. Daher verfügen in XAML erstellte Elemente über dieselbe Fähigkeit zur Interaktion mit Systemressourcen (z.B. Netzwerkzugriff, Dateisystem E/A), wie der gleichwertig generierte Code.

WPF unterstützt das .NET-Sicherheitsframework Code Access Security (CAS). Dies bedeutet, dass in der Internetzone ausgeführter WPF-Inhalt eingeschränkte Ausführungsberechtigungen hat. "Loose XAML" (Seiten mit nicht kompiliertem XAML, die zur Ladezeit von einem XAML-Viewer interpretiert werden) und XAML-Browseranwendung (XBAP) werden in der Regel in dieser Internetzone ausgeführt und verwenden den gleichen Berechtigungssatz. Wenn XAML allerdings in eine voll vertrauenswürdige Anwendung geladen wird, hat es den gleichen Zugriff auf Systemressourcen wie die Hostanwendung. Weitere Informationen finden Sie unter WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit.

Die Auswirkungen dieser Anweisungen XamlReader für besteht darin, dass Ihr Anwendungsentwurf Vertrauensentscheidungen zu dem XAML-Code treffen muss, den Sie laden möchten. Wenn Sie XAML laden, das nicht vertrauenswürdig ist, sollten Sie eine eigene Sandboxingtechnik für das Laden des resultierenden Objektgraphen implementieren.

XamlReader kann auch von teilweise vertrauenswürdigem Code aufgerufen werden. In diesem Fall wird die Internetsicherheitszone für die Codezugriffssicherheit angewendet. Wenn etwas im geladenen XAML-Code unter der Internetsicherheitszone ungültig ist, wird eine XAML-Analyseausnahme ausgelöst. Unter XBAP und anderen Fällen, die auf Plattformebene teilweise vertrauenswürdig sind, wo XamlReader Teil der Ausführung ist, erhalten Sie das gleiche Ausnahmeverhalten wie bei expliziten teilweise vertrauenswürdigen Aufrufen.

WPF-XAML, XAML-Leser/-Writer und XAML-Sprachversionsverwaltung

XAML2009 enthält Sprachfeatures wie x:Reference und x:FactoryMethod. Sie können Signaturen von Load oder Parse verwenden, um XAML zu laden, die diese Features verwendet. Diese Sprachfeatures werden jedoch nicht für XAML unterstützt, das Markup kompiliert werden muss (z. B. XAML für die Aktion Seitenbuild in einer WPF-Anwendung oder xaml, die die Markupkompilierungsaufgabe in den Buildaktionen umfasst).

WPF-Typen und die WPF-Technologie in allgemeinen Supportkonzepten, die auf dem Zugriff auf WPF-Interne basieren. Für instance basiert die Implementierung von Abhängigkeitseigenschaften von WPF auf internen Techniken für eine effiziente Typmembersuche. Der Zugriff auf diese internen Elemente wird durch die XAML-Lese- und Schreib-APIs ermöglicht, die in XamlWriter und XamlReader aus dem Namespace und der System.Windows.Markup PresentationFramework-Assembly bereitgestellt werden. Die XAML-Reader auf niedrigerer Ebene und XAML-Writer aus der System.Xaml-Assembly (Klassen basierend auf System.Xaml.XamlReader, System.Xaml.XamlWriter) haben jedoch keinen Zugriff auf die internen WPF-Elemente. Es gibt keine Abhängigkeit von System.Xaml zu einer WPF-spezifischen Assembly. Ohne Zugriff auf die internen WPF-Elemente können System.Xaml-Leser und -Writer nicht alle WPF-Typen oder Typen, die auf WPF-Typen basieren, ordnungsgemäß laden oder speichern. Insbesondere die System.Xaml-Leser und -Autoren verstehen nicht Konzepte wie den WPF-Abhängigkeitseigenschafts-Backing-Eigenschaftenspeicher oder alle Besonderheiten, wie WPF Stile, Ressourcenwörterbücher und Vorlagen verwendet. Daher haben Sie die Wahl:

  • Wenn Sie WPF-Typen laden und/oder XAML in irgendeiner Weise in BAML-Form verwenden, verwenden Sie die PresentationFramework-XAML-Reader und XAML-Writer.

  • Wenn Sie sich nicht auf WPF-Typen oder die BAML-Form von XAML verlassen und den XAML-Reader oder die XAML-Writer-Implementierung einer anderen Bestimmten Technologie aus für dieses Framework spezifischen Gründen nicht verwenden, verwenden Sie die System.Xaml-XAML-Reader und XAML-Writer.

System.Xaml-Unterstützungsimplementierung in .NET 4

XamlReader ist die aufrufbare API-Oberfläche für den XAML-Parser auf WPF-Frameworkebene. Der gleiche zugrunde liegende XAML-Parser führt auch das Laufzeitladen und Analysieren von XAML für WPF-Anwendungen aus, die .NET Framework 3.0 und .NET Framework 3.5 als Ziel verwenden.

Wenn Sie .NET Framework 4 als Ziel verwenden, ist die externe API identisch, aber Teile der Implementierung basieren auf der allgemeinen XAML-Implementierung .NET Framework 4 in der System.Xaml-Assembly, wodurch viele der technischen Aspekte und Berichterstellungsaspekte der Analyse von XAML verbessert werden. Das Ziel .NET Framework 4 umfasst notwendigerweise das Einschließen von System.Xaml als Verweis, und Details zur Implementierung, z. B. die gemeldeten Ausnahmen, können von system.xaml-definierten Typen stammen.

Konstruktoren

XamlReader()

Initialisiert eine neue Instanz der XamlReader-Klasse.

Methoden

CancelAsync()

Bricht den aktuellen asynchronen Ladevorgang ab, wenn noch ein asynchroner Ladevorgang aussteht.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetWpfSchemaContext()

Gibt ein XamlSchemaContext-Objekt zurück, das die Kontexteinstellungen des WPF-Schemas für einen XamlReader darstellt.

Load(Stream)

Liest die XAML-Eingabe im angegebenen Stream und gibt ein Object zurück, das das Stammelement der entsprechenden Objektstruktur darstellt.

Load(Stream, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

Load(Stream, ParserContext)

Liest die XAML-Eingabe im angegebenen Stream und gibt ein Objekt zurück, das das Stammelement der entsprechenden Objektstruktur darstellt.

Load(Stream, ParserContext, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

Load(XamlReader)

Liest die XAML-Eingabe über einen bereitgestellten XamlReader und gibt ein Objekt zurück, das das Stammelement der entsprechenden Objektstruktur darstellt.

Load(XmlReader)

Liest die XAML-Eingabe im angegebenen XmlReader und gibt ein Objekt zurück, das das Stammelement der entsprechenden Objektstruktur darstellt.

Load(XmlReader, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

LoadAsync(Stream)

Liest die XAML-Eingabe im angegebenen Stream und gibt das Stammelement der entsprechenden Objektstruktur zurück.

LoadAsync(Stream, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

LoadAsync(Stream, ParserContext)

Liest die XAML-Eingabe im angegebenen Stream und gibt das Stammelement der entsprechenden Objektstruktur zurück.

LoadAsync(Stream, ParserContext, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

LoadAsync(XmlReader)

Liest die XAML-Eingabe im angegebenen XmlReader und gibt das Stammelement der entsprechenden Objektstruktur zurück.

LoadAsync(XmlReader, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Parse(String)

Liest die XAML-Eingabe in der angegebenen Textzeichenfolge und gibt ein Objekt zurück, das dem Stammelement des angegebenen entspricht.

Parse(String, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

Parse(String, ParserContext)

Liest das XAML-Markup in der angegebenen Textzeichenfolge (mithilfe eines angegebenen ParserContext) und gibt ein Objekt zurück, das dem Stammelement des angegebenen Markups entspricht.

Parse(String, ParserContext, Boolean)

Liest XAML-Eingabe und erstellt ein Objektdiagramm und verwendet dazu den WPF-XAML-Standardparser sowie einen zugeordneten XAML-Objektwriter.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Ereignisse

LoadCompleted

Tritt ein, wenn ein asynchroner Ladevorgang abgeschlossen ist.

Gilt für:

Weitere Informationen