Zpracování prázdných znaků v jazyku XAML

Pravidla jazyka pro stav XAML, který musí zpracovat významné prázdné znaky, musí být zpracována implementací procesoru XAML. Tento článek dokumentuje tato jazyková pravidla XAML. Dokumentuje také další zpracování prázdných znaků, které je definováno implementací Windows Presentation Foundation (WPF) procesoru XAML a zapisovače XAML pro serializaci.

Definice prázdného místa

Konzistentní s XML, prázdnými znaky v JAZYCE XAML jsou mezera, kanál řádku a tabulátor. Odpovídají hodnotám Unicode 0020, 000A a 0009.

Normalizace prázdných znaků

Ve výchozím nastavení dochází k následující normalizaci prázdných znaků, když procesor XAML zpracuje soubor XAML:

  1. Odeberou se znaky v kanálu řádků mezi znaky východoasijských jazyků. Definici tohoto termínu najdete dále v tomto tématu v části Znaky východoasijských jazyků.

  2. Všechny prázdné znaky (mezera, spojnice, tabulátor) se převedou na mezery.

  3. Všechny po sobě jdoucí mezery se odstraní a nahradí jednou mezerou.

  4. Odstraní se mezera bezprostředně za počáteční značkou.

  5. Mezera bezprostředně před odstraněním koncové značky.

Výchozí odpovídá stavu označenému výchozí hodnotou atributu xml:space .

Prázdné znaky ve vnitřním textu a primitivy řetězců

Předchozí pravidla normalizace platí pro vnitřní text nalezený v elementech XAML. Po normalizaci převede procesor XAML jakýkoli vnitřní text na odpovídající typ následujícím způsobem:

  • Pokud typ vlastnosti není kolekce, ale není přímo Object typ, procesor XAML se pokusí převést na tento typ pomocí svého převaděče typů. Neúspěšný převod zde způsobí chybu v době kompilace.

  • Pokud je typ vlastnosti kolekce a vnitřní text je souvislý (bez značek prvků), vnitřní text se analyzuje jako jediný String. Pokud typ kolekce nemůže přijmout String, způsobí to také chybu v době kompilace.

  • Pokud je Objecttyp vlastnosti , vnitřní text je analyzován jako jeden String. Pokud existují intervenující značky elementů, to způsobí chybu v době kompilace, protože Object typ implikuje jeden objekt (String nebo jinak).

  • Pokud je typem vlastnosti kolekce a vnitřní text není souvislý, první podřetětěc se převede na String položku kolekce a přidá se jako položka kolekce, intervenující prvek se přidá jako položka kolekce a nakonec koncový podřetěc (pokud existuje) se přidá do kolekce jako třetí String položka.

Zachování prázdných znaků

Existuje několik technik zachování prázdných znaků ve zdrojovém kódu XAML pro případnou prezentaci, které nejsou ovlivněny normalizací prázdných znaků procesoru XAML.

xml:space="preserve": Zadejte tento atribut na úrovni prvku, kde je vyžadováno zachování prázdných znaků. Tím se zachovají všechny prázdné znaky, včetně mezer, které by mohly být přidány aplikacemi pro úpravy kódu, aby se prvky "pretty-print" zarovnaly jako vizuálně intuitivní vnoření. Zda je však vykreslení těchto mezer určeno kon režim stanu l pro prvek obsahující. Vyhněte se zadávání xml:space="preserve" na kořenové úrovni, protože většina objektových modelů nepovažuje prázdné znaky za významné bez ohledu na to, jak nastavíte atribut. Globální nastavení xml:space může mít vliv na výkon zpracování XAML (zejména serializace) v některých implementacích. Je lepší nastavit atribut pouze na úrovni prvků, které vykreslují prázdné znaky v řetězcích, nebo jsou prázdné znaky významné kolekce.

Entity a nerušované mezery: XAML podporuje umístění jakékoli entity Unicode do textového objektového modelu. V kódování UTF-8 můžete použít vyhrazené entity, jako je například nerozbité místo ( ). Můžete také použít ovládací prvky formátovaného textu, které podporují nerozbité znaky mezery. Pokud používáte entity k simulaci charakteristik rozložení, jako je odsazení, měli byste být opatrní, protože výstup za běhu entit se bude lišit na základě většího počtu faktorů, než by možnosti pro vytváření odsazení měly za následek typický systém rozložení, například správné použití panelů a okrajů. Například entity se mapují na písma a můžou změnit velikost v reakci na výběr písma uživatele.

Znaky východoasijských jazyků

"Znaky východoasijských jazyků" jsou definovány jako sada oblastí znaků Unicode U+20000 až U+2FFFD a U+30000 až U+3FFFD. Tato podmnožina se také někdy označuje jako "ideografie CJK". Další informace najdete na webu https://www.unicode.org.

Prázdné znaky a mezery textu režim stanu ls

V praxi je zachování prázdných míst pouze obavou pro podmnožinu všech možných kon režim stanu ls. Tato podmnožina se skládá z kon režim stanu ls, které mohou mít jeden String typ v nějaké formě, vyhrazenou String kolekci nebo kombinaci String a jiných typů v IList kolekci nebo ICollection<T> kolekci.

Prázdné znaky a textové kon režim stanu ls ve WPF

Pro ilustraci zbývající část tohoto oddílu odkazuje na konkrétní typy, které jsou definovány WPF. Funkce pro zpracování prázdných znaků, které jsou popsané v tomto článku, jsou relevantní pro služby .NET XAML i WPF. Chcete-li zobrazit toto chování v akci, můžete experimentovat s některými kódy WPF XAML, zobrazit výsledky v grafu objektu a potom serializovat zpět na revize znovu.

I pro con režim stanu ls, které mohou brát řetězce, výchozí chování v rámci těchto con režim stanu ls je, že všechny prázdné znaky, které zůstávají, nejsou považovány za významné. Například ListBox vezme znak IList, ale prázdné znaky (například spojnice mezi jednotlivými ListBoxItem) se nezachovají a nevykreslují. Pokud se pokusíte použít jako oddělovače mezi řetězci pro ListBoxItem položky, nefunguje vůbec; řetězce oddělené jednotlivými řádky jsou považovány za jeden řetězec a jednu položku.

Tyto kolekce, které zpracovávají prázdné znaky jako významné, jsou obvykle součástí modelu dokumentu toku. Primární kolekce, která podporuje chování zachování prázdných znaků, je InlineCollection. Tato třída kolekce je deklarována s WhitespaceSignificantCollectionAttribute; při nalezení tohoto atributu, procesor XAML bude zacházet s prázdným místem v kolekci jako významné. Kombinace a prázdných xml:space="preserve" znaků v WhitespaceSignificantCollectionAttribute označené kolekci spočívá v tom, že se zachovají a vykreslují všechny prázdné znaky. Kombinace prázdných znaků v rámci WhitespaceSignificantCollectionAttribute příčiny počáteční normalizace prázdných xml:space="default" znaků popsaných dříve, což ponechá jednu mezeru v určitých pozicích a tyto mezery se zachovají a vykreslují. Jaké chování je žádoucí, je na vás a měli byste použít xml:space selektivní povolení požadovaného chování.

Některé vložené prvky, které označují zalomení řádku v modelu dokumentu toku, by také neměly záměrně zavádět nadbytečné mezery ani ve významné kolekci prázdných znaků. LineBreak Například element má stejný účel jako <značka BR/> v HTML a pro čitelnost v kódu, obvykle je LineBreak oddělen od jakéhokoli dalšího textu vytvořeným linefeedem. Tento spojnicový kanál by neměl být normalizován tak, aby se stal úvodní mezerou v následujícím řádku. Aby bylo možné toto chování povolit, definice třídy pro LineBreak prvek použije TrimSurroundingWhitespaceAttribute, který je pak interpretován procesorem XAML, aby bylo vždy oříznuto prázdné znaky kolem LineBreak .

Viz také