XAML dan spasi kosong

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

Pemrosesan spasi kosong

Konsisten dengan XML, karakter spasi kosong di XAML adalah spasi, linefeed, dan tab. Ini sesuai dengan nilai Unicode masing-masing 0020, 000A, dan 0009. Secara default normalisasi spasi putih 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 kosong (spasi, umpan baris, tab) dikonversi menjadi spasi.
  • Semua spasi berturut-turut dihapus dan digantikan oleh satu spasi.
  • Spasi segera setelah tag mulai 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 terkadang disebut sebagai ideograf CJK. Untuk informasi selengkapnya, lihat http://www.unicode.org.

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

Spasi kosong dalam teks dalam, dan primitif string

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

  • Jika jenis properti bukan koleksi, tetapi bukan secara langsung jenis Objek , prosesor XAML mencoba mengonversi ke jenis tersebut menggunakan pengonversi jenisnya. Konversi yang gagal di sini menghasilkan kesalahan penguraian XAML.
  • Jika jenis properti adalah koleksi, dan teks dalam berdekatan (tidak ada tag elemen intervensi), teks dalam diurai sebagai String tunggal. Jika jenis koleksi tidak dapat menerima String, ini juga menghasilkan kesalahan pengurai XAML.
  • Jika jenis properti adalah Objek, maka teks dalam diurai sebagai String tunggal. Jika ada tag elemen intervensi, ini menghasilkan kesalahan pengurai XAML, karena jenis Objek menyiratkan satu objek (String atau sebaliknya).
  • Jika jenis properti adalah koleksi, dan teks dalam tidak bersebelahan, maka substring pertama dikonversi menjadi String dan ditambahkan sebagai item koleksi, elemen intervensi ditambahkan sebagai item koleksi, dan akhirnya substring berikutnya (jika ada) ditambahkan ke koleksi sebagai item String ketiga.

Model konten spasi putih dan teks

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

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

Mempertahankan spasi kosong

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

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

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