XAML dan spasi putih

Pelajari tentang aturan pemrosesan spasi putih seperti yang digunakan oleh XAML.

Pemrosesan spasi putih

Konsisten dengan XML, karakter spasi di XAML adalah spasi, linefeed, dan tab. Ini sesuai dengan nilai Unicode masing-masing 0020, 000A, dan 0009. Secara default normalisasi spasi ini terjadi ketika prosesor XAML menemukan teks dalam yang ditemukan di antara elemen dalam file XAML:

  • Karakter linefeed antara karakter Asia Timur dihapus.
  • Semua karakter spasi putih (spasi, umpan garis, tab) diubah menjadi spasi.
  • Semua spasi berturut-turut dihapus dan diganti dengan satu spasi.
  • Ruang segera setelah tag awal dihapus.
  • Spasi segera sebelum tag akhir dihapus.
  • Karakter Asia Timur didefinisikan sebagai satu set rentang karakter Unicode U +20000 hingga U+2FFFD dan U+30000 hingga U+3FFFD. Subset ini juga kadang-kadang disebut sebagai ideographs CJK. Untuk informasi selengkapnya, lihat http://www.unicode.org.

"Default" sesuai dengan status yang dilambangkan dengan nilai default atribut xml:space .

Spasi putih dalam teks dalam, dan string primitif

Aturan normalisasi di atas berlaku untuk teks dalam dalam elemen XAML. Setelah normalisasi, prosesor XAML mengubah teks dalam menjadi jenis yang sesuai seperti ini:

  • Jika jenis properti bukan koleksi, tetapi tidak secara langsung merupakan tipe Objek , prosesor XAML mencoba mengonversi ke jenis itu menggunakan konverter tipenya. Konversi yang gagal di sini menghasilkan kesalahan penguraian XAML.
  • Jika jenis properti adalah koleksi, dan teks bagian dalam bersebelahan (tidak ada tag elemen intervensi), teks bagian dalam diurai sebagai String tunggal. Jika jenis koleksi tidak dapat menerima String, ini juga menghasilkan kesalahan parser XAML.
  • Jika jenis properti adalah Objek, maka teks bagian dalam diurai sebagai String tunggal. Jika ada tag elemen intervensi, ini menghasilkan kesalahan parser XAML, karena tipe Objek menyiratkan satu objek (String atau lainnya).
  • Jika jenis properti adalah koleksi, dan teks bagian dalam tidak bersebelahan, maka substring pertama diubah menjadi String dan ditambahkan sebagai item koleksi, elemen intervensi ditambahkan sebagai item koleksi, dan akhirnya substring trailing (jika ada) ditambahkan ke koleksi sebagai item String ketiga.

Model whitespace dan konten teks

Dalam praktiknya, melestarikan spasi hanya menjadi perhatian untuk subset dari semua model konten yang mungkin. Subset itu terdiri dari model konten yang dapat mengambil jenis String singleton dalam beberapa bentuk, koleksi String khusus, atau campuran String dan jenis lainnya dalam daftar, koleksi, atau kamus.

Bahkan untuk model konten yang dapat mengambil string, perilaku default dalam model konten ini adalah bahwa setiap spasi yang tersisa tidak diperlakukan sebagai signifikan.

Melestarikan spasi putih

Beberapa teknik untuk melestarikan spasi di sumber XAML untuk presentasi akhirnya tidak terpengaruh oleh normalisasi ruang putih prosesor XAML.

xml:space="preserve": Tentukan atribut ini pada tingkat elemen di mana spasi perlu dipertahankan. Perhatikan bahwa ini mempertahankan semua spasi, termasuk spasi yang mungkin ditambahkan oleh editor kode atau permukaan desain untuk menyelaraskan elemen markup sebagai bersarang yang intuitif secara visual. Apakah render spasi tersebut lagi merupakan masalah model konten untuk elemen yang berisi. Kami tidak menyarankan Anda menentukan xml:space="preserve" pada tingkat root, karena sebagian besar model objek tidak menganggap spasi putih sebagai salah satu cara yang signifikan. Ini adalah praktik yang lebih baik untuk hanya mengatur atribut secara khusus pada tingkat elemen yang membuat spasi dalam string, atau merupakan koleksi signifikan spasi putih.

Entitas dan ruang non-pemecah: XAML mendukung penempatan entitas Unicode apa pun dalam model objek teks. Anda dapat menggunakan entitas khusus seperti ruang nonbreaking (dalam pengkodean UTF-8). Anda juga dapat menggunakan kontrol teks kaya yang mendukung karakter ruang nonbreaking. Berhati-hatilah jika Anda menggunakan entitas untuk mensimulasikan karakteristik tata letak seperti indentasi, karena output run-time entitas bervariasi berdasarkan sejumlah faktor yang lebih besar daripada fasilitas tata letak umum, seperti penggunaan panel dan margin yang tepat.