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.
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 Zeichenfolge mithilfe der XamlWriter Klasse in eine Zeichenfolge konvertiert. Die Zeichenfolge wird dann in eine Button mithilfe der statischen Load Methode der XamlReader Klasse zurückgeladen.
// 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 Instanz der XamlReader Klasse.
Die Ausgabe der Load Methoden ist ein einzelnes Objekt, das das Stammobjekt einer erstellten Objektstruktur oder eines Objektdiagramms darstellt. Objektdiagramme, die 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 sie nicht gerendert wird und nicht über eine der Objektstrukturtechniken zugegriffen werden kann, wie sie auf die Hauptobjektstruktur der WPF-Anwendung angewendet wird (z. B. die APIs FindName, LogicalTreeHelper, VisualTreeHelper). Weitere Informationen zu Objektstrukturkonzepten finden Sie unter "Bäume in WPF".
XamlReader unterstützt die folgenden primären Szenarien:
Kloning/Objektfabrik: 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 erneute Verwendung in WPF bieten, umfassen Objekte, die auf Freezablehäufig freigegebenen Objekten basieren, z Brush . B. als Element aus einem ResourceDictionary.) Eine Möglichkeit zum Klonen eines Objekts, das sich bereits in der Objektstruktur befindet, besteht darin, das Objekt mithilfe XamlWriter.Savevon Serialisieren. Anschließend verwenden Sie die serialisierte Zeichenfolge als Eingabe für einen Aufruf Load, einen Datenstrom oder XmlReader als Vermittler.
Erstellen von Objekten basierend auf Just-in-Time-Informationen: Es gibt häufig andere Möglichkeiten, verspätete Bindung oder vom Benutzer bereitgestellte Eingaben den Status vorhandener Objekte zu ändern. Sie können beispielsweise denselben Wert verwenden, um mehrere Eigenschaften festzulegen oder datenbindung zu verwenden. Wenn Sie jedoch über ein Szenario verfügen, in dem selbst der zu erstellende Objekttyp zur Laufzeit oder mit Benutzerinteraktion nur determinierbar ist, ist das Erstellen eines solchen Objekts durch Erstellen einer Zeichenfolge für Load die Eingabe häufig eine nützliche Technik.
Verwenden vorhandener Ressourcentechniken: Der Stream Typ wird häufig in anderen Frameworks oder Technologien zum Übertragen von Daten oder Objekten über Anwendungsgrenzen oder ähnliche Situationen verwendet. Anschließend können Sie die Techniken verwenden, um XAML-formatierte Daten zu speichern oder abzurufen, die Stream Sie schließlich zum Erstellen eines Objekts als Teil Ihrer Anwendung verwenden.
Feste Dokumente: Ihre Anwendung lädt möglicherweise lokale oder heruntergeladene XPS-Dokumente für die Aufnahme in eine WPF-Anwendungsobjektstruktur und ui.
Hinweis
In dieser Dokumentation wird manchmal ein Objektdiagramm im Gegensatz zu einer Objektstruktur beschrieben. Eine strikte beziehung zwischen übergeordnetem untergeordnetem Element ist in den Laufzeitobjektbeziehungen einer Laufzeit-WPF-Anwendung nicht immer vorhanden, sodass ein Objektdiagramm eine allgemeinere Terminologie darstellt. 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 der XAML-Sprachperspektive ist das Objektdiagramm jedoch häufig die beste Methode, um zu überlegen, wie Objekte aus XAML erstellt werden, da die XAML-Sprache selbst nicht unbedingt Hilfsklassenmethoden angibt, die die Beziehungen wieder in eine Struktur integrieren.
Codezugriffssicherheit, lose 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 die .NET Security Framework Code Access Security (CAS). Dies bedeutet, dass in der Internetzone ausgeführter WPF-Inhalt eingeschränkte Ausführungsberechtigungen hat. "Lose XAML" (Seiten von nicht kompiliertem XAML- interpretiert zur Ladezeit durch einen XAML-Viewer) und XAML-Browseranwendung (XBAP) werden normalerweise in dieser Internetzone ausgeführt und verwenden denselben 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 sind XamlReader , dass Ihr Anwendungsdesign vertrauenswürdige Entscheidungen über den XAML-Code treffen muss, den Sie laden möchten. Wenn Sie XAML laden, der nicht vertrauenswürdig ist, sollten Sie ihre eigene Sandkastentechnik implementieren, um das resultierende Objektdiagramm zu laden.
XamlReader kann auch durch teilvertrauenswürdigen Code aufgerufen werden. In diesem Fall wird die Internetsicherheitszone für die Codezugriffssicherheit angewendet. Wenn etwas in der geladenen XAML-Datei unter der Internetsicherheitszone ungültig ist, wird eine XAML-Analyseausnahme ausgelöst. Unter XBAP und anderen Fällen, die teilweise vertrauenswürdig sind, auf Plattformebene, wo XamlReader Teil der Ausführung ist, erhalten Sie das gleiche Ausnahmeverhalten wie bei expliziten teilweisen Vertrauensaufrufen.
WPF-XAML, XAML-Leser/Autoren und XAML-Sprachversionsverwaltung
XAML2009 enthält Sprachfeatures wie x:Reference und x:FactoryMethod. Sie können Signaturen von oder zum Laden von Load Parse XAML verwenden, die diese Features verwendet. Diese Sprachfeatures werden jedoch für XAML nicht unterstützt, die kompiliert werden müssen (z. B. XAML für die Seitenbuildaktion in einer WPF-Anwendung oder xaml, die die Markupkompilierungsaufgabe in den Buildaktionen umfasst).
WPF-Typen und die WPF-Technologie in allgemeinen Supportkonzepten, die auf den Zugriff auf WPF-Interne angewiesen sind. So implementiert WPF beispielsweise Abhängigkeitseigenschaften, hängt von internen Techniken für eine effiziente Typelementsuche ab. Der Zugriff auf diese Internen wird durch die XAML-Lese- und Schreib-APIs aktiviert, die in XamlWriter und XamlReader aus der System.Windows.Markup Namespace- und PresentationFramework-Assembly bereitgestellt werden. Die XAML-Leser auf niedrigerer Ebene und XAML-Autoren aus der System.Xaml-Assembly (Klassen basierend auf System.Xaml.XamlReader, System.Xaml.XamlWriter) haben jedoch keinen Zugriff auf die WPF-Internen. Es gibt keine Abhängigkeit von System.Xaml zu einer WPF-spezifischen Assembly. Ohne Zugriff auf die WPF-Internen können System.Xaml-Leser und Autoren alle WPF-Typen oder Typen basierend auf WPF-Typen nicht ordnungsgemäß laden oder speichern. Insbesondere verstehen die System.Xaml-Leser und Autoren keine Konzepte wie den WPF-Abhängigkeitseigenschafts-Sicherungseigenschaftenspeicher oder alle Besonderheiten der Verwendung von Formatvorlagen, Ressourcenwörterbüchern und Vorlagen. Daher haben Sie eine Wahl:
Wenn Sie WPF-Typen laden und/oder XAML in BAML-Formular auf beliebige Weise verwenden, verwenden Sie die XAML-Leser von PresentationFramework und XAML-Autoren.
Wenn Sie sich nicht auf WPF-Typen oder die BAML-Form von XAML verlassen und nicht die XAML-Reader- oder XAML-Writer-Implementierung einer anderen Technologie aus Gründen verwenden, die für dieses Framework spezifisch sind, verwenden Sie die XAML-Leser von System.Xaml und XAML-Autoren.
System.Xaml-Backingimplementierung in .NET 4
XamlReader ist die aufrufbare API-Oberfläche für den XAML-Parser auf WPF-Frameworkebene. Derselbe zugrunde liegende XAML-Parser führt auch das Ausführen des Xaml-Ladens und Analysierens für WPF-Anwendungen aus, die auf .NET Framework 3.0 und .NET Framework 3.5 abzielen.
Wenn Sie auf .NET Framework 4 abzielen, ist die externe API identisch, aber Teile der Implementierung basieren auf der .NET Framework 4 allgemeinen XAML-Implementierung in der System.Xaml-Assembly, die viele der technischen und Berichterstellungsaspekte der Analyse von XAML verbessert. Die Ausrichtung .NET Framework 4 umfasst notwendigerweise die Einbeziehung von System.Xaml als Referenz und Details der Implementierung, z. B. die gemeldeten Ausnahmen, können aus 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) | |
| 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) | |
| 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) | |
| LoadAsync(Stream) |
Liest die XAML-Eingabe im angegebenen Stream und gibt das Stammelement der entsprechenden Objektstruktur zurück. |
| LoadAsync(Stream, Boolean) | |
| LoadAsync(Stream, ParserContext) |
Liest die XAML-Eingabe im angegebenen Stream und gibt das Stammelement der entsprechenden Objektstruktur zurück. |
| LoadAsync(Stream, ParserContext, Boolean) | |
| LoadAsync(XmlReader) |
Liest die XAML-Eingabe im angegebenen XmlReader und gibt das Stammelement der entsprechenden Objektstruktur zurück. |
| LoadAsync(XmlReader, Boolean) | |
| 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) | |
| 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) | |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Ereignisse
| LoadCompleted |
Tritt ein, wenn ein asynchroner Ladevorgang abgeschlossen ist. |