Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az XAML nyelvi szabályai azt jelentik, hogy jelentős szabad területet kell feldolgoznia egy XAML-processzor implementációjának. Ez a cikk ezeket az XAML nyelvi szabályokat ismerteti. Emellett az XAML processzor és az XAML-író szerializáláshoz használt Windows Presentation Foundation (WPF) implementációja által meghatározott további térközkezelést is dokumentálja.
Szabad terület definíciója
Az XML-sel összhangban az XAML-ben a szóköz, a vonalas és a tabulátor karakterek szerepelnek. Ezek a 0020, 000A és 0009 Unicode-értékeknek felelnek meg.
Térköz normalizálása
Alapértelmezés szerint a következő térköz normalizálása történik, ha egy XAML-processzor feldolgoz egy XAML-fájlt:
A program eltávolítja a kelet-ázsiai karakterek közötti sortörési karaktereket. Ennek a kifejezésnek a definícióját a jelen témakör későbbi, kelet-ázsiai karakterekkel foglalkozó szakaszában találja.
Az összes szóköz karakter (szóköz, sortörés, lap) szóközökké lesz alakítva.
Az egymást követő szóközök törlődnek, és egy szóközzel helyettesítik őket.
A rendszer azonnal törli a kezdőcímkét követő szóközt.
Egy szóköz közvetlenül a végcímke törlése előtt.
Az "Alapértelmezett" az xml:space attribútum alapértelmezett értéke által megadott állapotnak felel meg.
Szóköz a belső szövegben és sztringprimitívek
Az előző normalizálási szabályok az XAML-elemekben található belső szövegre vonatkoznak. A normalizálás után az XAML-processzor az alábbi módon konvertálja a belső szövegeket egy megfelelő típussá:
Ha a tulajdonság típusa nem gyűjtemény, de nem közvetlenül Object típus, akkor az XAML-processzor a típuskonverter használatával megpróbál erre a típusra konvertálni. A sikertelen átalakítás fordítási időt eredményez.
Ha a tulajdonság típusa gyűjtemény, és a belső szöveg egybefüggő (nincsenek beavatkozó elemcímkék), a belső szöveg egyetlen Stringlesz elemezve. Ha a gyűjtemény típusa nem tudja elfogadni a String, az fordítási időt is hibát okoz.
Ha a tulajdonság típusa Object, a belső szöveg egyetlen Stringlesz elemezve. Ha vannak beavatkozó elemcímkék, ez fordítási időt érintő hibát okoz, mert a Object típus egyetlen objektumot (String vagy más módon) jelez.
Ha a tulajdonság típusa gyűjtemény, és a belső szöveg nem egybefüggő, az első részszúrás String lesz, és gyűjteményelemként lesz hozzáadva, a program gyűjteményelemként adja hozzá a beavatkozó elemet, végül a záró részszúrást (ha van ilyen) harmadik String elemként adja hozzá a gyűjteményhez.
A szabad terület megőrzése
A forrás XAML-ben számos olyan technika létezik, amellyel megőrizhető a szabad terület a végleges megjelenítéshez, amelyeket nem befolyásol az XAML processzor szabad terület normalizálása.
xml:space="preserve": Adja meg ezt az attribútumot annak az elemnek a szintjén, ahol a szabad terület megőrzésére van szükség. Ez megőrzi az összes üres helyet, beleértve azokat a szóközöket is, amelyeket kódszerkesztő alkalmazások adhatnak hozzá a "szép nyomtatáshoz" az elemek vizuálisan intuitív beágyazásként való igazításához. Azt azonban, hogy ezeket a szóközöket a tartalommodell határozza-e meg a tartalomelemhez. Ne adja meg a xml:space="preserve" a gyökérszinten, mert a legtöbb objektummodell nem tekinti jelentősnek a szabad helyet, függetlenül attól, hogy hogyan állítja be az attribútumot. A xml:space globális beállítása egyes implementációkban teljesítménybeli következményekkel járhat az XAML-feldolgozásra (különösen a szerializálásra). Jobb eljárás, ha az attribútumot csak a sztringeken belül fehér területet megjelenítő elemek szintjén állítja be, vagy a térközök jelentős gyűjteményei.
Entitások és nem töredező szóközök: Az XAML támogatja a Unicode-entitások szövegobjektum-modellben való elhelyezését. Dedikált entitásokat használhat, például nem törhető helyet ( az UTF-8 kódolásban). Rich Text-vezérlőket is használhat, amelyek támogatják a szóközkaraktereket. Óvatosnak kell lennie, ha entitásokkal szimulálja az elrendezési jellemzőket, például a behúzást, mivel az entitások futásidejű kimenete több tényezőtől függően változik, mint a behúzási képességek egy tipikus elrendezési rendszerben, például a panelek és margók megfelelő használata. Az entitások például betűtípusokra vannak leképezve, és a felhasználó betűkészletének kiválasztására válaszul módosíthatják a méretet.
Kelet-ázsiai karakterek
A "kelet-ázsiai karakterek" az U+20000 és U+2FFFD, U+30000 és U+3FFFD közötti Unicode-karaktertartományok halmazaként definiálva. Ezt az alkészletet néha "CJK-ideográfoknak" is nevezik. További információ: https://www.unicode.org.
Tér- és szöveges tartalommodellek
A gyakorlatban a szabad terület megőrzése csak az összes lehetséges tartalommodell egy részhalmaza számára fontos. Ez az alkészlet olyan tartalommodellekből áll, amelyek valamilyen formában egyetlen String típust, egy dedikált String gyűjteményt, vagy String és más típusú IList vagy ICollection<T> gyűjtemények keverékét képesek elvégezni.
Tér- és szöveges tartalommodellek a WPF-ben
Illusztráció céljából a szakasz többi része a WPF által definiált bizonyos típusokra hivatkozik. A cikkben ismertetett térközkezelési funkciók mind a .NET XAML-szolgáltatásokra, mind a WPF-re egyaránt jellemzőek. Ha működés közben szeretné látni ezt a viselkedést, kísérletezhet valamilyen WPF XAML-korrektúrával, megtekintheti az eredményeket egy objektumgráfban, majd újra szerializálhatja a korrektúrát.
Még az olyan tartalommodellek esetében is, amelyek sztringeket is tartalmazhatnak, a tartalommodellek alapértelmezett viselkedése az, hogy a megmaradó szabad terület nem számít jelentősnek. A ListBox például IListvesz igénybe, de a szabad terület (például az egyes ListBoxItemközötti szegélyek) nem marad meg, és nem jelenik meg. Ha ListBoxItem elemek sztringjei között sortöréseket próbál használni, az egyáltalán nem működik; a sortörések által elválasztott sztringek egy sztringként és egy elemként lesznek kezelve.
Azok a gyűjtemények, amelyek jelentősként kezelik a szabad területet, általában a folyamatdokumentum-modell részét képezik. Az elsődleges gyűjtemény, amely támogatja a térmegőrző viselkedést, InlineCollection. Ez a gyűjteményosztály deklarálva van a WhitespaceSignificantCollectionAttribute; Ha ez az attribútum megtalálható, az XAML-processzor jelentősnek fogja tekinteni a gyűjteményen belüli üres helyet. A xml:space="preserve" és a WhitespaceSignificantCollectionAttribute-gyűjteményen belüli üres terület kombinációja az, hogy az összes üres terület megmarad és renderelődik. A xml:space="default" és a WhitespaceSignificantCollectionAttribute belüli üres tér kombinációja a korábban leírt kezdeti tér-tér normalizálását eredményezi, amely bizonyos helyeken egy helyet hagy, és ezek a szóközök megmaradnak és renderelhetők. A kívánt viselkedés az Ön feladata, és a xml:space szelektíven kell használnia a kívánt viselkedés engedélyezéséhez.
Emellett bizonyos beágyazott elemek, amelyek egy folyamatdokumentum-modellben egy sortörést jelölnek, szándékosan nem szabad többletteret eredményezni még egy jelentős szabad területű gyűjteményben sem. A LineBreak elem célja például ugyanaz, mint a HTML-ben a <BR/> címke, és a korrektúra olvashatósága érdekében a LineBreak általában egy szerzői vonalas szöveg választja el minden további szövegtől. Ezt a vonalszakaszt nem szabad normalizálni, hogy a következő sorban vezető térré váljon. A viselkedés engedélyezéséhez a LineBreak elem osztálydefiníciója a TrimSurroundingWhitespaceAttributealkalmazza, amelyet aztán az XAML-processzor úgy értelmez, hogy a LineBreak körülvevő üres terület mindig levágva lesz.
Lásd még:
.NET Desktop feedback