XAML'de Boşluk İşleme

XAML durumu için önemli boşlukların bir XAML işlemci uygulaması tarafından işlenmesi gerektiğini belirten dil kuralları. Bu makalede bu XAML dil kuralları belgelemektedir. Ayrıca, XAML işlemcisinin Windows Presentation Foundation (WPF) uygulaması ve serileştirme için XAML yazıcısı tarafından tanımlanan ek boşluk işlemeyi belgeler.

Boşluk tanımı

XML ile tutarlı olan XAML'deki boşluk karakterleri boşluk, satır besleme ve sekmedir. Bunlar sırasıyla 0020, 000A ve 0009 Unicode değerlerine karşılık gelir.

Boşluk normalleştirme

Varsayılan olarak, bir XAML işlemcisi bir XAML dosyasını işlediğinde aşağıdaki boşluk normalleştirmesi gerçekleşir:

  1. Doğu Asya karakterleri arasındaki satır besleme karakterleri kaldırılır. Bu terimin tanımı için bu konunun devamında yer alan "Doğu Asya Karakterleri" bölümüne bakın.

  2. Tüm boşluk karakterleri (boşluk, satır besleme, sekme) boşluklara dönüştürülür.

  3. Ardışık tüm boşluklar silinir ve bir boşlukla değiştirilir.

  4. Başlangıç etiketinin hemen ardından gelen bir alan silinir.

  5. Bitiş etiketi silinmeden hemen önce bir alan.

"Varsayılan", xml:space özniteliğinin varsayılan değeriyle belirtilen duruma karşılık gelir.

İç metinde boşluk ve dize ilkelleri

Önceki normalleştirme kuralları, XAML öğeleri içinde bulunan iç metne uygulanır. Normalleştirmeden sonra, XAML işlemcisi tüm iç metinleri aşağıdaki gibi uygun bir türe dönüştürür:

  • Özelliğin türü bir koleksiyon değilse ancak doğrudan bir Object tür değilse, XAML işlemcisi türü dönüştürücüsünü kullanarak bu türe dönüştürmeyi dener. Burada başarısız bir dönüştürme derleme zamanı hatasına neden olur.

  • Özelliğin türü bir koleksiyonsa ve iç metin bitişikse (araya dahil olan öğe etiketleri yoksa), iç metin tek Stringbir olarak ayrıştırılır. Koleksiyon türü kabul Stringedemiyorsa, bu da derleme zamanı hatasına neden olur.

  • özelliğinin türü ise Object, iç metin tek Stringbir olarak ayrıştırılır. Araya dahil olan öğe etiketleri varsa, bu tür tek bir nesne (Stringveya başka bir şekilde) anlamına geldiğinden derleme zamanı hatasına Object neden olur.

  • Özelliğin türü bir koleksiyonsa ve iç metin bitişik değilse, ilk alt dize bir String öğesine dönüştürülür ve koleksiyon öğesi olarak eklenir, araya giren öğe koleksiyon öğesi olarak eklenir ve son olarak da sondaki alt dize (varsa) koleksiyona üçüncü String bir öğe olarak eklenir.

Boşluğu koruma

XAML işlemci boşluk normalleştirmesi tarafından etkilenmeyen son sunu için kaynak XAML'de boşluk korumaya yönelik çeşitli teknikler vardır.

xml:space="preserve": Bu özniteliği, boşluk korumasının istendiği öğe düzeyinde belirtin. Bu, öğeleri görsel olarak sezgisel bir iç içe yerleştirme olarak "oldukça yazdırmak" için kod düzenleme uygulamaları tarafından eklenebilen boşlukları içeren tüm boşlukları korur. Ancak, bu alanların işlenip işlenmediği, içeren öğenin con çadır modu l tarafından belirlenir. Çoğu nesne modeli özniteliğini nasıl ayarladığınızdan bağımsız olarak boşluk değerini önemli olarak değerlendirmediğinden kök düzeyinde belirtmekten xml:space="preserve" kaçının. Genel olarak ayarlanması xml:space , bazı uygulamalarda XAML işleme (özellikle serileştirme) üzerinde performans sonuçlarına neden olabilir. Özniteliği yalnızca dizeler içinde boşluk oluşturan veya boşluk açısından önemli koleksiyonlar olan öğeler düzeyinde ayarlamak daha iyi bir uygulamadır.

Varlıklar ve hataya neden olmayan alanlar: XAML, herhangi bir Unicode varlığının bir metin nesnesi modeline yerleştirilmesini destekler. Bölünemez alan (  UTF-8 kodlamasında) gibi ayrılmış varlıkları kullanabilirsiniz. Bölünemez boşluk karakterlerini destekleyen zengin metin denetimleri de kullanabilirsiniz. Varlıkları, indention gibi düzen özelliklerinin benzetimini yapmak için kullanıyorsanız dikkatli olmanız gerekir çünkü varlıkların çalışma zamanı çıkışı, indention oluşturma özelliklerinin, panellerin ve kenar boşluklarının düzgün kullanımı gibi tipik bir düzen sisteminde elde edilecek özelliklerden daha fazla sayıda faktöre göre değişir. Örneğin, varlıklar yazı tiplerine eşlenir ve kullanıcı yazı tipi seçimine yanıt olarak boyutu değiştirebilir.

Doğu Asya karakterleri

"Doğu Asya karakterleri", U+20000 ile U+2FFFD ve U+30000 ile U+3FFFD arasında bir Unicode karakter aralığı kümesi olarak tanımlanır. Bu alt küme bazen "CJK ideografları" olarak da adlandırılır. Daha fazla bilgi için bkz. https://www.unicode.org.

Boşluk ve metin con çadır modu ls

Pratikte, boşluğun korunması yalnızca tüm olası con çadır modu ls alt kümelerini ilgilendirir. Bu alt küme, bir biçimde tekil String bir tür, ayrılmış String koleksiyon veya bir veya ICollection<T> koleksiyondaki ve diğer türlerin IList karışımını String alabilen con çadır modu ls'lerden oluşur.

WPF'de boşluk ve metin con çadır modu ls

Çizim amacıyla, bu bölümün geri kalanı WPF tarafından tanımlanan belirli türlere başvurur. Bu makalede açıklanan boşluk işleme özellikleri hem .NET XAML Hizmetleri hem de WPF için geçerlidir. Bu davranışın nasıl çalıştığını görmek için bazı WPF XAML işaretlemeleriyle denemeler yapıp sonuçları bir nesne grafında görüntüleyebilir ve işaretlemeyi yeniden seri hale getirebilirsiniz.

Dize alabilen con çadır modu ls için bile, bu con çadır modu ls içindeki varsayılan davranış, kalan boşlukların önemli olarak kabul edilmemesidir. Örneğin, ListBox bir IListalır, ancak boşluk (her ListBoxItembiri arasındaki satır beslemeleri gibi) korunmaz ve işlenmez. Satır akışlarını öğeler için ListBoxItem dizeler arasında ayırıcı olarak kullanmayı denerseniz, hiç çalışmaz; satır akışlarıyla ayrılan dizeler bir dize ve bir öğe olarak kabul edilir.

Boşlukları önemli olarak değerlendiren koleksiyonlar genellikle akış belgesi modelinin bir parçasıdır. Boşluk koruma davranışını destekleyen birincil koleksiyondur InlineCollection. Bu koleksiyon sınıfı ile bildirilir WhitespaceSignificantCollectionAttribute; bu öznitelik bulunduğunda, XAML işlemcisi koleksiyon içindeki boşluğu önemli olarak kabul eder. Belirtilen bir WhitespaceSignificantCollectionAttribute koleksiyondaki boşluk ve boşluk birleşimixml:space="preserve", tüm boşlukların korunması ve işlenmesidir. bir içindeki WhitespaceSignificantCollectionAttribute ve boşluk bileşimixml:space="default", daha önce açıklanan ilk boşluk normalleştirmesine neden olur ve bu da belirli konumlarda bir boşluk bırakır ve bu boşluklar korunur ve işlenir. Hangi davranışın istendiği size bağlı ve istediğiniz davranışı etkinleştirmek için seçmeli olarak kullanmalısınız xml:space .

Ayrıca, akış belgesi modelinde satır sonunu belirten bazı satır içi öğeler, boşluk açısından önemli bir koleksiyonda bile kasıtlı olarak fazladan alan eklememelidir. Örneğin, LineBreak öğe HTML'deki BR/> etiketiyle <aynı amaca sahiptir ve işaretlemede okunabilirlik için, genellikle bir LineBreak sonraki metinden yazarlı satır beslemesi ile ayrılır. Bu satır beslemesi, sonraki satırda önde gelen bir boşluk olacak şekilde normalleştirilmemelidir. Bu davranışı etkinleştirmek için, öğesinin LineBreak sınıf tanımı, çevresindeki boşluğun LineBreak her zaman kırpıldığı anlamına gelen XAML işlemcisi tarafından yorumlanan öğesini uygularTrimSurroundingWhitespaceAttribute.

Ayrıca bkz.