Leerstellenverarbeitung in XAMLWhite-space processing in XAML

Die Sprachregeln für XAML State, dass signifikanter Leerraum durch eine XAMLXAML Prozessor Implementierung verarbeitet werden muss.The language rules for XAML state that significant white space must be processed by a XAMLXAML processor implementation. In diesem Thema werden diese XAML-Sprachregeln erläutert.This topic documents these XAML language rules. Außerdem wird eine zusätzliche Leerraum Behandlung dokumentiert, die durch die Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Implementierung des XAML-Prozessors und des XAML-Writers für die Serialisierung definiert wird.It also documents additional white space handling that is defined by the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) implementation of the XAML processor and the XAML writer for serialization.

Leerraum DefinitionWhite-space definition

Übereinstimmend mit XMLXMLLeerzeichen in XAMLXAML sind Leerzeichen, Zeilenvorschub und Tabulator. Diese entsprechen den UnicodeUnicode -Werten 0020, 000A bzw. 0009.Consistent with XMLXML, white-space characters in XAMLXAML are space, linefeed, and tab. These correspond to the UnicodeUnicode values 0020, 000A, and 0009 respectively.

Leerraum NormalisierungWhite-space normalization

Standardmäßig tritt die folgende leer Raum Normalisierung auf, wenn XAMLXAML ein Prozessor eine XAMLXAML Datei verarbeitet:By default the following white-space normalization occurs when a XAMLXAML processor processes a XAMLXAML file:

  1. Zeilenvorschubzeichen zwischen ostasiatischen Zeichen werden entfernt.Linefeed characters between East Asian characters are removed. Eine Definition dieses Begriffs finden Sie im Abschnitt „Ostasiatische Zeichen“ weiter hinten in diesem Thema.See the "East Asian Characters" section later in this topic for a definition of this term.

  2. Alle leer Raum Zeichen (Leerzeichen, Zeilenvorschub, Tabulator) werden in Leerzeichen konvertiert.All white-space characters (space, linefeed, tab) are converted into spaces.

  3. Alle aufeinander folgenden Leerzeichen werden gelöscht und durch ein Leerzeichen ersetzt.All consecutive spaces are deleted and replaced by one space.

  4. Ein Leerzeichen unmittelbar nach dem Starttag wird gelöscht.A space immediately following the start tag is deleted.

  5. Ein Leerzeichen unmittelbar vor dem Endtag wird gelöscht.A space immediately before the end tag is deleted.

„Standard“ entspricht dem Zustand, der durch den Standardwert des xml:space -Attribut bezeichnet wird."Default" corresponds to the state denoted by the default value of the xml:space attribute.

Leerraum in innerem Text und Zeichen folgen primitiveWhite space in inner text, and string primitives

Die oben genannten Normalisierungsregeln gelten für inneren Text innerhalb von XAML-Elementen.The previous normalization rules apply to inner text that is found within XAML elements. Nach der Normalisierung konvertiert ein XAML-Prozessor inneren Text wie folgt in einen entsprechenden Typ:After normalization, a XAML processor converts any inner text into an appropriate type as follows:

  • Wenn der Typ der Eigenschaft keine Auflistung, aber nicht direkt ein Object -Typ ist, versucht der XAML-Prozessor, unter Verwendung seines Typkonverters eine Konvertierung in diesen Typ durchzuführen.If the type of the property is not a collection but is not directly an Object type, the XAML processor attempts to convert to that type by using its type converter. Ein Konvertierungsfehler verursacht einen Fehler zu Kompilierzeit.A failed conversion here causes a compile-time error.

  • Wenn der Typ der Eigenschaft eine Auflistung und der innere Text zusammenhängend ist (keine dazwischen liegenden Elementtags), wird der innere Text als einzelner Stringanalysiert.If the type of the property is a collection and the inner text is contiguous (no intervening element tags), the inner text is parsed as a single String. Wenn der Auflistungstyp Stringnicht akzeptieren kann, führt dies ebenfalls zu einem Kompilierzeitfehler.If the collection type cannot accept String, this also causes a compile-time error.

  • Wenn der Typ der Eigenschaft Objectist, wird der innere Text als einzelner Stringanalysiert.If the type of the property is Object, the inner text is parsed as a single String. Wenn dazwischen liegende Elementtags vorhanden sind, führt dies zu einem Kompilierzeitfehler, da der Object -Typ ein einzelnes Objekt impliziert (String oder anderes).If there are intervening element tags, this causes a compile-time error because the Object type implies a single object (String or otherwise).

  • Wenn der Typ der Eigenschaft eine Auflistung und der innere Text nicht zusammenhängend ist, wird die erste Teilzeichenfolge in einen String konvertiert und als Auflistungselement hinzugefügt, das dazwischen liegende Element wird als Auflistungselement hinzugefügt, und schließlich wird die nachgestellte Teilzeichenfolge (sofern vorhanden) der Auflistung als drittes String -Element hinzugefügt.If the type of the property is a collection, and the inner text is not contiguous, the first substring is converted into a String and added as a collection item, the intervening element is added as a collection item, and finally the trailing substring (if any) is added to the collection as a third String item.

Beibehalten von LeerraumPreserving white space

Es gibt mehrere Verfahren zum Beibehalten von Leerraum in der XAMLXAML Quelle für die letztliche Darstellung, die XAMLXAML von der Leerraum Normalisierung des Prozessors nicht betroffen sind.There are several techniques for preserving white space in the source XAMLXAML for eventual presentation that are not affected by XAMLXAML processor white-space normalization.

xml:space="preserve" : Geben Sie dieses Attribut auf der Ebene des Elements an, auf dem die Leerraum Beibehaltung gewünscht ist.xml:space="preserve": Specify this attribute at the level of the element where white-space preservation is desired. Hierdurch werden alle Leerräume beibehalten, auch die Leerzeichen, die ggf. von Codebearbeitungsanwendungen als visuell intuitive Schachtelung hinzugefügt werden, um Elemente für den Schöndruck auszurichten.This preserves all white space, which includes the spaces that might be added by code-editing applications to "pretty-print" align elements as a visually intuitive nesting. Ob diese Leerzeichen gerendert werden, wird jedoch durch das Inhaltsmodell für das enthaltende Element bestimmt.However, whether those spaces render is determined by the content model for the containing element. Vermeiden Sie xml:space="preserve" die Angabe von auf der Stamm Ebene, da die meisten Objekt Modelle Leerzeichen nicht als signifikant betrachten, unabhängig davon, wie Sie das Attribut festlegen.Avoid specifying xml:space="preserve" at the root level because most object models do not consider white space as significant regardless of how you set the attribute. Die globale Festlegung von xml:space kann in einigen Implementierungen die Leistung der XAML-Verarbeitung (insbesondere der Serialisierung) beeinträchtigen.Setting xml:space globally may have performance consequences on XAML processing (particularly serialization) in some implementations. Es empfiehlt sich, das-Attribut nur auf der Ebene der Elemente festzulegen, die Leerzeichen innerhalb von Zeichen folgen darstellen, oder es handelt sich um eine bedeutende Auflistung von Leerraum.It is a better practice to only set the attribute specifically at the level of elements that render white space within strings, or are white-space significant collections.

Entitäten und geschützte Leerzeichen: XAMLXAML unterstützt das Platzieren beliebiger UnicodeUnicode -Entitäten in einem Textobjektmodell.Entities and non breaking spaces: XAMLXAML supports placing any UnicodeUnicode entity within a text object model. Sie können dedizierte Entitäten wie z. b. einen#nicht unterbrechenden Bereich verwenden (& 160; in UTF-8-Codierung)You can use dedicated entities such as nonbreaking space (  in UTF-8 encoding). Sie können auch Rich-Text-Steuerelemente verwenden, die geschützte Leerzeichen unterstützen.You can also use rich text controls that support nonbreaking space characters. Seien Sie vorsichtig, wenn Sie Entitäten zum Simulieren von Layouteigenschaften wie Einzügen verwenden, da die Laufzeitausgabe der Entitäten basierend auf einer größeren Anzahl von Faktoren variiert, als dies bei den Funktionen zum Erzeugen von Einzugsergebnisse in einem typischen Layoutsystem der Fall ist, z. B. richtige Verwendung von Bereichen und Rändern.You should be cautious if you are using entities to simulate layout characteristics such as indention, because the run-time output of the entities will vary based on a greater number of factors than would the capabilities for producing indention results in a typical layout system, such as proper use of panels and margins. Beispielsweise werden Entitäten Schriftarten zugeordnet und können sich als Reaktion auf eine Schriftartauswahl durch den Benutzer in der Größe ändern.For instance, entities are mapped to fonts and can change size in response to user font selection.

Ostasiatische ZeichenEast Asian characters

Unter „ostasiatischen Zeichen“ versteht man einen Satz von UnicodeUnicode -Zeichen in den Bereichen von U+20000 bis U+2FFFD und U+30000 bis U+3FFFD."East Asian characters" is defined as a set of UnicodeUnicode character ranges U+20000 to U+2FFFD and U+30000 to U+3FFFD. Diese Teilmenge wird manchmal auch als „CJK-Ideogramme“ bezeichnet.This subset is also sometimes referred to as "CJK ideographs". Weitere Informationen finden Sie unter https://www.unicode.org.For more information, see https://www.unicode.org.

Leerraum-und Text Inhalts ModelleWhite space and text content models

In der Praxis ist das Beibehalten von Leerräumen nur für eine Teilmenge aller möglichen Inhalts Modelle von Bedeutung.In practice, preserving white space is only of concern for a subset of all possible content models. Diese Teilmenge besteht aus Inhaltsmodellen, die eine Form von Singleton- String -Typ, eine dedizierte String -Auflistung oder eine Mischung aus String und anderen Typen in einer IList - oder ICollection<T> -Auflistung verwenden können.That subset is composed of content models that can take a singleton String type in some form, a dedicated String collection, or a mixture of String and other types in an IList or ICollection<T> collection.

Leerraum-und Text Inhalts Modelle in WPFWhite space and text content models in WPF

Zur Veranschaulichung bezieht sich der Rest dieses Abschnitts auf bestimmte von WPF definierte Typen.For illustration purposes, the remainder of this section references particular types that are defined by WPF. Die in diesem Thema beschriebenen Funktionen zur Behandlung von Leerzeichen sind in der Regel sowohl für .NET Framework XAML-Dienste als auch für WPF relevant.The white-space handling features that are described in this topic are generally pertinent to both .NET Framework XAML Services and WPF. Um diese Verhaltensweisen in Aktion zu sehen, können Sie mit einigen WPF-XAML-Markups experimentieren, die Ergebnisse in einem Objektdiagramm anzeigen und dann wieder zurück zu Markup serialisieren.To see this behavior in action, you might experiment with some WPF XAML markup, view the results in an object graph, and then serialize back to markup again.

Sogar für Inhalts Modelle, die Zeichen folgen verwenden können, besteht das Standardverhalten innerhalb dieser Inhalts Modelle darin, dass alle verbleibenden Leerräume nicht als signifikant behandelt werden.Even for content models that can take strings, the default behavior within these content models is that any white space that remains is not treated as significant. Beispielsweise ListBox ListBoxItemwird von angenommen, aber der Leerraum (z. b. Zeilen Vorschübe zwischen den einzelnen) wird nicht beibehalten und nicht gerendert. IListFor example, ListBox takes an IList, but the white space (such as linefeeds between each ListBoxItem) is not preserved and not rendered. Wenn Sie versuchen, Zeilenvorschübe als Trennzeichen zwischen Zeichenfolgen für ListBoxItem -Elemente zu verwenden, funktioniert dies nicht; alle durch die Zeilenvorschübe getrennten Zeichenfolgen werden als eine Zeichenfolge und ein Element behandelt.If you attempt to use linefeeds as separators between strings for ListBoxItem items, it does not work at all; the strings that are separated by the linefeeds are treated as one string and one item.

Diese Auflistungen, die Leerräume als signifikant behandeln, sind in der Regel Teil des Fluss Dokument Modells.Those collections that do treat white space as significant are typically part of the flow document model. Die primäre Auflistung, die das Verhalten der leer Raum Beibehaltung InlineCollectionunterstützt, ist.The primary collection that supports white-space preservation behavior is InlineCollection. Diese Auflistungs Klasse wird mit WhitespaceSignificantCollectionAttributedem deklariert; wenn dieses Attribut gefunden wird XAMLXAML , behandelt der Prozessor Leerraum in der Auflistung als signifikant.This collection class is declared with the WhitespaceSignificantCollectionAttribute; when this attribute is found, the XAMLXAML processor will treat white space within the collection as significant. Die Kombination xml:space="preserve" aus und Leerraum innerhalb WhitespaceSignificantCollectionAttribute einer bezeichneten Auflistung besteht darin, dass alle Leerräume beibehalten und gerendert werden.The combination of xml:space="preserve" and white space within a WhitespaceSignificantCollectionAttribute denoted collection is that all white space is preserved and rendered. Die Kombination xml:space="default" aus-und-Leerraum in einem WhitespaceSignificantCollectionAttribute bewirkt die oben beschriebene anfängliche leer Raum Normalisierung, die ein Leerzeichen an bestimmten Positionen verlässt. diese Leerzeichen werden beibehalten und gerendert.The combination of xml:space="default" and white space within a WhitespaceSignificantCollectionAttribute causes the initial white-space normalization described earlier, which leaves one space in certain positions, and those spaces are preserved and rendered. Welches Verhalten Sie bevorzugen, steht Ihnen frei, und Sie sollten xml:space selektiv verwenden, um das gewünschte Verhalten zu aktivieren.Which behavior is desirable is up to you, and you should use xml:space selectively to enable the behavior that you want.

Außerdem sollten bestimmte Inline Elemente, die einen LineBreak in einem Fluss Dokument Modell darstellen, absichtlich keinen zusätzlichen Platz in einer signifikanten Auflistung mit Leerraum einführen.Also, certain inline elements that connote a linebreak in a flow document model should deliberately not introduce an extra space even in a white-space significant collection. Das LineBreak -Element hat z. b. den gleichen Zweck <wie das BR/>-Tag in HTML, und zur besseren Lesbarkeit in Markup LineBreak wird ein von einem erstellten Zeilenvorschub in der Regel von jedem nachfolgenden Text getrennt.For example, the LineBreak element has the same purpose as the <BR/> tag in HTML, and for readability in markup, typically a LineBreak is separated from any subsequent text by an authored linefeed. Dieser Zeilenvorschub darf nicht zu einem voranstellten Leerzeichen in der nächsten Zeile normalisiert werden.That linefeed should not be normalized to become a leading space in the subsequent line. Um dieses Verhalten zu aktivieren, wendet die Klassendefinition LineBreak für das- TrimSurroundingWhitespaceAttributeElement das an, das dann vom XAMLXAML Prozessor interpretiert wird, um zu bedeuten LineBreak , dass Leerraum immer gekürzt wird.To enable that behavior, the class definition for the LineBreak element applies the TrimSurroundingWhitespaceAttribute, which is then interpreted by the XAMLXAML processor to mean that white space surrounding LineBreak is always trimmed.

Siehe auchSee also