XAML und LeerzeichenXAML and whitespace

Informationen zu von XAML verwendeten Regeln für die Leerzeichenverarbeitung.Learn about the whitespace processing rules as used by XAML.

LeerzeichenverarbeitungWhitespace processing

In Übereinstimmung mit XML sind Leerzeichen in XAML Leerzeichen, Zeilenvorschub und Tabulator. Diese entsprechen den Unicode-Werten 0020, 000A bzw. 0009.Consistent with XML, whitespace characters in XAML are space, linefeed, and tab. These correspond to the Unicode values 0020, 000A, and 0009 respectively. Standardmäßig wird diese Leerzeichennormalisierung angewendet, wenn ein XAML-Verarbeiter auf internen Text zwischen Elementen in einer XAML-Datei stößt:By default this whitespace normalization occurs when a XAML processor encounters any inner text found between elements in a XAML file:

  • Zeilenvorschubzeichen zwischen ostasiatischen Zeichen werden entfernt.Linefeed characters between East Asian characters are removed.
  • Alle Leerraumzeichen (Leerzeichen, Zeilenvorschub, Tabulator) werden in Leerzeichen konvertiert.All whitespace characters (space, linefeed, tab) are converted into spaces.
  • Alle aufeinander folgenden Leerzeichen werden gelöscht und durch ein Leerzeichen ersetzt.All consecutive spaces are deleted and replaced by one space.
  • Ein Leerzeichen unmittelbar nach dem Starttag wird gelöscht.A space immediately following the start tag is deleted.
  • Ein Leerzeichen unmittelbar vor dem Endtag wird gelöscht.A space immediately before the end tag is deleted.
  • Mit ostasiatischen Zeichen sind die Unicode-Zeichenbereiche „U+20000 bis U+2FFFD“ und „U+30000 bis U+3FFFD“ gemeint.East Asian characters is defined as a set of Unicode character ranges U+20000 to U+2FFFD and U+30000 to U+3FFFD. Diese Teilmenge wird manchmal auch als cjk-ideographbezeichnet.This subset is also sometimes referred to as CJK ideographs. Weitere Informationen finden Sie unter http://www.unicode.org.For more information, see http://www.unicode.org.

„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.

Leerzeichen in internem Text und Zeichenfolgen-GrundtypenWhitespace in inner text, and string primitives

Die oben angegebenen Normalisierungsregeln gelten für internen Text innerhalb von XAML-Elementen.The above normalization rules apply to inner text within XAML elements. Nach der Normalisierung konvertiert ein XAML-Prozessor sämtlichen internen Text gemäß den folgenden Regeln in einen passenden Typ:After normalization, a XAML processor converts any inner text into an appropriate type like this:

  • Wenn es sich beim Typ der Eigenschaft nicht um eine Sammlung, aber auch nicht direkt um einen Object-Typ handelt, versucht der XAML-Prozessor, mithilfe des eigenen Typkonverters eine Konvertierung in diesen Typ auszuführen.If the type of the property is not a collection, but is not directly an Object type, the XAML processor tries to convert to that type using its type converter. Ist diese Konvertierung nicht erfolgreich, tritt ein XAML-Analysefehler auf.A failed conversion here results in a XAML parse error.
  • Wenn es sich beim Typ der Eigenschaft um eine Sammlung handelt und der interne Text zusammenhängend ist (also keine zusätzlichen Elementtags enthält), wird der interne Text als einzelner String analysiert.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 Sammlungstyp keinen String akzeptiert, tritt ebenfalls ein XAML-Analysefehler auf.If the collection type cannot accept String, this also results in a XAML parser error.
  • Wenn es sich um eine Eigenschaft vom Typ Object handelt, wird der interne Text als einzelner String analysiert.If the type of the property is Object, then the inner text is parsed as a single String. Sind zusätzliche Elementtags enthalten, tritt ein XAML-Analysefehler auf, da der Typ Object für ein einzelnes Objekt steht (String oder ein anderes Objekt).If there are intervening element tags, this results in a XAML parser error, because the Object type implies a single object (String or otherwise).
  • Wenn es sich beim Typ der Eigenschaft um eine Sammlung handelt und der interne Text nicht zusammenhängend ist, wird die erste Teilzeichenfolge in einen String konvertiert und als Sammlungselement hinzugefügt. Das Zwischenelement wird ebenfalls als Sammlungselement hinzugefügt, und schließlich wird der Sammlung die nachgestellte Teilzeichenfolge (sofern vorhanden) als drittes String-Element hinzugefügt.If the type of the property is a collection, and the inner text is not contiguous, then 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.

Leerzeichen und TextinhaltsmodelleWhitespace and text content models

In der Praxis ist der Erhalt von Leerzeichen nur bei einem Teil der möglichen Inhaltsmodelle von Bedeutung.In practice, preserving whitespace is of concern only for a subset of all possible content models. Zu diesem Teil gehören Inhaltsmodelle, die ein Singleton vom Typ String in beliebiger Form, eine dedizierte Sammlung mit Elementen vom Typ String oder eine Mischung aus String und anderen Typen in Listen, Sammlungen oder Wörterbüchern akzeptieren.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 lists, collections, or dictionaries.

Sogar für Inhaltsmodelle, die Zeichenfolgen unterstützen, besteht das Standardverhalten innerhalb dieser Inhaltsmodelle darin, dass alle verbleibenden Leerräume als nicht signifikant behandelt werden.Even for content models that can take strings, the default behavior within these content models is that any whitespace that remains is not treated as significant.

Beibehalten von LeerzeichenPreserving whitespace

Leerzeichen im Quell-XAML-Code können für die spätere Darstellung auf unterschiedliche Arten beibehalten werden. Diese sind von der XAML-Leerzeichennormalisierung des XAML-Verarbeiters nicht betroffen.Several techniques for preserving whitespace in the source XAML for eventual presentation are not affected by XAML processor whitespace normalization.

xml:space="preserve": Geben Sie dieses Attribut auf der Ebene des Elements an, für das die Leerzeichen erhalten bleiben sollen.xml:space="preserve": Specify this attribute at the level of the element where whitespace needs to be preserved. Beachten Sie, dass dadurch alle Leerzeichen erhalten bleiben, einschließlich derer, die möglicherweise von Codeeditoren oder Entwurfsoberflächen hinzugefügt werden, um Markupelemente als visuell intuitive Schachtelung auszurichten.Note that this preserves all whitespace, including the spaces that might be added by code editors or design surfaces to align markup elements as a visually intuitive nesting. Ob diese Leerzeichen gerendert werden ist ebenfalls wieder eine Frage des Inhaltsmodells für das Containerelement.Whether those spaces render is again a matter of the content model for the containing element. Wir raten davon ab, xml:space="preserve" auf Stammebene anzugeben, da die Mehrzahl an Objektmodellen Leerzeichen in der Regel nicht als signifikant ansehen.We don't recommend that you specify xml:space="preserve" at the root level, because the majority of object models don't consider whitespace as significant one way or another. Es ist besser, das Attribut nur auf der Ebene von Elementen spezifisch festzulegen, die Leerräume in Zeichenfolgen rendern oder leeraumsignifikate Auflistungen sind.It is a better practice to only set the attribute specifically at the level of elements that render whitespace within strings, or are whitespace significant collections.

Entitäten und geschützte Leerzeichen: In XAML kann eine beliebige Unicodeentität innerhalb eines Textobjektmodells angegeben werden.Entities and nonbreaking spaces: XAML supports placing any Unicode entity within a text object model. Sie können dedizierte Entitäten wie geschützte Leerzeichen (in UTF-8-Codierung) verwenden.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. Gehen Sie mit Bedacht vor, wenn Sie Layoutmerkmale wie Einzüge mithilfe von Entitäten simulieren, da die Laufzeitausgabe der Entitäten von einer größeren Anzahl von Faktoren abhängt als bei den allgemeinen Layoutkomponenten, beispielsweise der ordnungsgemäßen Verwendung von Bereichen und Rändern.Be cautious if you are using entities to simulate layout characteristics such as indents, because the run-time output of the entities vary based on a greater number of factors than would the general layout facilities, such as proper use of panels and margins.