Serialisierungseinschränkungen für XamlWriter.SaveSerialization Limitations of XamlWriter.Save

Die API Save können verwendet werden, um den Inhalt der serialisieren eine Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) -Anwendung als eine Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) Datei.The API Save can be used to serialize the contents of a Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) application as a Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) file. Es gibt jedoch einige wichtige Einschränkungen darin, was genau serialisiert wird.However, there are some notable limitations in exactly what is serialized. Diese Einschränkungen und einige allgemeine Aspekte werden in diesem Thema dokumentiert.These limitations and some general considerations are documented in this topic.

Laufzeit-, statt EntwurfszeitdarstellungRun-Time, Not Design-Time Representation

Die grundlegende Strategie dafür, was durch einen Aufruf von serialisiert wird Save besteht darin, dass das Resultat eine Darstellung des Objekts, das serialisiert wird, zur Laufzeit sein wird.The basic philosophy of what is serialized by a call to Save is that the result will be a representation of the object being serialized, at run-time. Viele Entwurfszeiteigenschaften der ursprünglichen XAMLXAML Datei ist möglicherweise bereits optimiert oder verloren geht, mit der Zeit, die die XAMLXAML als Objekte im Arbeitsspeicher geladen wird, und werden nicht beibehalten, wenn Sie aufrufen Save serialisiert.Many design-time properties of the original XAMLXAML file may already be optimized or lost by the time that the XAMLXAML is loaded as in-memory objects, and are not preserved when you call Save to serialize. Das serialisierte Ergebnis ist eine effektive Darstellung der konstruierten logischen Struktur der Anwendung, aber nicht notwendigerweise der ursprünglichen XAMLXAML, mit der es erstellt wurde.The serialized result is an effective representation of the constructed logical tree of the application, but not necessarily of the original XAMLXAML that produced it. Diese Probleme machen es extrem schwierig, verwenden Sie die Save Serialisierung als Teil einer umfassenden XAMLXAML Entwurfsoberfläche.These issues make it extremely difficult to use the Save serialization as part of an extensive XAMLXAML design surface.

Die Serialisierung ist in sich geschlossenSerialization is Self-Contained

Die serialisierte Ausgabe von Save ist in sich geschlossen; alles, was serialisiert wird, der in enthalten ist ein XAMLXAML einzelne Seite, mit der ein einzelnes Stammelement und keinen externen Verweise außer URIsURIs.The serialized output of Save is self-contained; everything that is serialized is contained inside a XAMLXAML single page, with a single root element, and no external references other than URIsURIs. Wenn Ihre Seite beispielsweise auf Ressourcen aus Anwendungsressourcen verweist, werden diese so angezeigt, als handele es sich um eine Komponente der serialisierten Seite.For instance, if your page referenced resources from application resources, these will appear as if they were a component of the page being serialized.

Erweiterungsverweise werden dereferenziertExtension References are Dereferenced

Allgemeine Verweise auf Objekte durch verschiedene Markuperweiterungsformate, z.B. StaticResource oder Binding, werden durch den Serialisierungsprozess dereferenziert.Common references to objects made by various markup extension formats, such as StaticResource or Binding, will be dereferenced by the serialization process. Diese wurden bereits zu dem Zeitpunkt dereferenziert, die in-Memory-Objekte durch die Anwendungslaufzeit erstellt wurden und die Save -Logik kehrt nicht mehr den ursprünglichen XAMLXAML um solche Verweise auf die serialisierte Ausgabe wiederherzustellen.These were already dereferenced at the time that in-memory objects were created by the application runtime, and the Save logic does not revisit the original XAMLXAML to restore such references to the serialized output. Dadurch werden möglicherweise alle datengebundenen oder aus Ressourcen abgerufenen Werte auf den zuletzt zur Darstellung der Laufzeit verwendeten Wert gesperrt. Ein solcher Wert kann nur eingeschränkt oder indirekt von anderen lokal festgelegten Werten unterschieden werden.This potentially freezes any databound or resource obtained value to be the value last used by the run-time representation, with only limited or indirect ability to distinguish such a value from any other value set locally. Bilder werden ebenfalls als Objektverweise auf Bilder serialisiert, da sie im Projekt und nicht als ursprüngliche Quellenverweise enthalten sind. Dabei verlieren sie den Dateinamen oder die URIURI, auf die ursprünglich verwiesen wurde.Images are also serialized as object references to images as they exist in the project, rather than as original source references, losing whatever filename or URIURI was originally referenced. Sogar Ressourcen, die auf der selben Seite deklariert werden, werden an den Punkt serialisiert, von dem aus auf sie verwiesen wird, und bleiben nicht als Schlüssel einer Ressourcenauflistung erhalten.Even resources declared within the same page are seen serialized into the point where they were referenced, rather than being preserved as a key of a resource collection.

Ereignisbehandlung wird nicht beibehaltenEvent Handling is Not Preserved

Wenn Ereignishandler, die durch XAMLXAML hinzugefügt wurden, serialisiert werden, werden diese nicht beibehalten.When event handlers that are added through XAMLXAML are serialized, they are not preserved. XAMLXAML ohne CodeBehind (und auch ohne den zugehörigen x:Code-Mechanismus) kann keine prozedurale Logik zur Laufzeit serialisieren.without code-behind (and also without the related x:Code mechanism) has no way of serializing runtime procedural logic. Da die Serialisierung in sich geschlossen und auf die logische Struktur beschränkt ist, besteht keine Möglichkeit zur Speicherung der Ereignishandler.Because serialization is self-contained and limited to the logical tree, there is no facility for storing the event handlers. Folglich werden bei Ereignishandlerattributen sowohl das Attribut selbst als auch der Zeichenfolgenwert, der den Handler benennt, aus der XAMLXAML-Ausgabe entfernt.As a result, event handler attributes, both the attribute itself and the string value that names the handler, are removed from the output XAMLXAML.

Realistische Szenarios für die Verwendung von XAMLWriter.SaveRealistic Scenarios for Use of XAMLWriter.Save

Während die Einschränkungen aufgeführt. hier sind ziemlich umfangreich, es gibt noch mehrere geeignete Szenarien für die Verwendung Save für die Serialisierung.While the limitations listed here are fairly substantial, there are still several appropriate scenarios for using Save for serialization.

  • Vektorausgabe oder grafische Ausgabe: Die Ausgabe des gerenderten Bereichs kann dazu verwendet werden, den gleichen Vektor oder Grafiken beim erneuten Laden zu reproduzieren.Vector or graphical output: The output of the rendered area can be used to reproduce the same vector or graphics when reloaded.

  • Rich Text und Flussdokumente Dokumente: Text und alle Element elementformatierungen und elementeinschlüsse darin wird in der Ausgabe beibehalten.Rich text and flow documents: Text and all element formatting and element containment within it is preserved in the output. Dies kann für Mechanismen nützlich sein, die einer Zwischenablagefunktionalität ähneln.This can be useful for mechanisms that approximate a clipboard functionality.

  • Beibehalten von Daten für Geschäftsobjekte: Wenn Sie Daten in benutzerdefinierten Elementen wie z. B. gespeichert haben XMLXML Daten, solange Ihre Geschäftsobjekte grundlegende folgen XAMLXAML Regeln wie das Bereitstellen von benutzerdefinierten Konstruktoren und das Konvertieren für durch Verweis Eigenschaftswerte, die diese Geschäftsobjekte werden können über die Serialisierung aufrechterhalten.Preserving business object data: If you have stored data in custom elements, such as XMLXML data, so long as your business objects follow basic XAMLXAML rules such as providing custom constructors and conversion for by-reference property values, these business objects can be perpetuated through serialization.