XAML'de Boşluk İşleme
Xaml durumunun, bir XAML işlemci uygulamasıyla ilgili önemli boşluk olarak işlenmesi gereken dil kuralları. Bu makale, bu XAML dil kurallarını belgeler. ayrıca xaml işlemcisinin Windows Presentation Foundation (WPF) uygulamasıyla ve serileştirme için xaml yazıcısında tanımlanan ek beyaz alan işlemesini belgeler.
Boşluk tanımı
XAML 'de XML, boşluk karakterleri, boşluk, linefeed ve Tab ile tutarlıdır. 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 beyaz boşluk normalleştirmesi oluşur:
Doğu Asya karakterleri arasında linefeed karakterleri kaldırılır. Bu terimin bir tanımı için bu konunun devamındaki "Doğu Asya karakterleri" bölümüne bakın.
Tüm beyaz boşluk karakterleri (boşluk, linefeed, sekme) boşluklara dönüştürülür.
Tüm ardışık Boşluklar silinir ve bir boşluk ile değiştirilmiştir.
Başlangıç etiketinden hemen sonraki bir boşluk silinir.
Bitiş etiketi silinmeden hemen önce bir boşluk.
"Default", XML: Space özniteliğinin varsayılan değeri tarafından belirtilen duruma karşılık gelir.
İç metinde boşluk ve dize temelleri
Önceki normalleştirme kuralları XAML öğeleri içinde bulunan iç metin için geçerlidir. Normalleştirme sonrasında bir XAML işlemcisi, herhangi bir iç metni 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ürmeye çalışır. Başarısız bir dönüştürme, derleme zamanı hatasına neden olur.
Özelliğin türü bir koleksiyon ise ve iç metin bitişik ise (aradaki öğe etiketi yoksa), iç metin tek bir olarak ayrıştırılır String . Koleksiyon türü kabul edemez String , bu da derleme zamanı hatasına neden olur.
Özelliğin türü ise Object , iç metin tek bir olarak ayrıştırılır String . Aradaki öğe etiketleri varsa, Object tür tek bir nesne ( String veya başka bir şekilde) gösterdiği için bu bir derleme zamanı hatasına neden olur.
Özelliğin türü bir koleksiyon ise ve iç metin bitişik değilse, ilk alt dize öğesine dönüştürülür String ve koleksiyon öğesi olarak eklenir, aradaki öğe bir koleksiyon öğesi olarak eklenir ve son alt dize (varsa) koleksiyona üçüncü öğe olarak eklenir String .
Boşluk koruma
XAML işlemcisi beyaz alan normalleştirmesi tarafından etkilenmeyen son sunum için kaynak XAML 'de boşluk korumak için çeşitli teknikler vardır.
XML: Space = "koru": Bu özniteliği, boşluk saklama işleminin istendiği öğe düzeyinde belirtin. Bu, kod düzenlemesi uygulamaları tarafından görsel açıdan sezgisel bir iç içe geçme olarak öğeleri "düzgün yazdırma" olarak hizalamak için eklenen boşlukları içeren tüm boşluğu korur. Ancak, bu alanlar işleme, kapsayan öğe için içerik modeli tarafından belirlenir. xml:space="preserve"Nesne modellerinin çoğu özniteliği nasıl ayarlamaktan bağımsız olarak boş değer düşünmediğinden kök düzeyinde belirtmekten kaçının. xml:spaceKüresel ayar, bazı uygulamalarda xaml işlemede (özellikle serileştirme) performans sonuçlarının olması olabilir. Özniteliği yalnızca dizeler içinde boşluk işleyen ya da boşluk açısından önemli koleksiyonlardaki öğe düzeyinde ayarlamak daha iyi bir uygulamadır.
Varlıklar ve bölünemez boşluklar: XAML, bir metin nesne modeli içinde herhangi bir Unicode varlığının yerleştirilmesini destekler. Bölünemez boşluk ( & #160; UTF-8 kodlaması) gibi adanmış varlıkları kullanabilirsiniz. Bölünemez boşluk karakterlerini destekleyen zengin metin denetimleri de kullanabilirsiniz. Varlıkların çalışma zamanı çıktısı, yaygın olarak kullanılan bir düzen sisteminde (örneğin, panellerin ve kenar boşluklarının kullanımı gibi) Savunma sonuçları oluşturma olanaklarından daha fazla sayıda faktöre göre farklılık gösterdiğinden, varlıkları, girintileme gibi düzen özelliklerinin benzetimini yapmak için kullanıyorsanız dikkatli olmanız gerekir. Ö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-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 Kavram Resimleri" olarak da adlandırılır. Daha fazla bilgi için bkz. https://www.unicode.org.
Boşluk ve metin içeriği modelleri
Uygulamada, boşluk korumak, yalnızca tüm olası içerik modellerinin bir alt kümesiyle ilgili kaygıdır. Bu alt küme, String bazı biçimde, özel bir koleksiyonda veya bir String ya da String bir koleksiyondaki diğer türler için IList tek bir tür alan içerik modellerinden oluşur ICollection<T> .
WPF 'de boşluk ve metin içeriği modelleri
Çizim amaçları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 uygun. Bu davranışı eylemde görmek için, bazı WPF XAML işaretlemelerini deneyebilir, sonuçları bir nesne grafiğinde görüntüleyebilir ve sonra yeniden biçimlendirmeye tekrar serileştirmenize olanak sağlayabilirsiniz.
Dizeleri alan içerik modelleri bile, bu içerik modelleriyle ilgili varsayılan davranış, kalan tüm boşluklar önemli kabul edilmez. Örneğin, ListBox bir alır IList , ancak boşluk (her biri arasındaki satır beslemeleri gibi ListBoxItem ) korunmaz ve işlenmez. Satır akışlarını öğeler için dizeler arasında ayırıcılar olarak kullanmaya çalışırsanız ListBoxItem , hiç çalışmaz; satır akışlarıyla ayrılmış dizeler tek bir dize ve bir öğe olarak değerlendirilir.
Boşlukları önemli olarak ele alan koleksiyonlar genellikle akış belge modelinin bir parçasıdır. Beyaz alanı koruma davranışını destekleyen birincil koleksiyon, InlineCollection . Bu koleksiyon sınıfı ile bildirilmiştir WhitespaceSignificantCollectionAttribute ; Bu öznitelik BULUNDUĞUNDA XAML işlemcisi, koleksiyon içindeki boşlukları önemli ölçüde değerlendirir. xml:space="preserve"Belirtilen bir koleksiyon içindeki ve boşluk birleşimi, WhitespaceSignificantCollectionAttribute tüm boşluklar korunmalı ve işlenir. xml:space="default"Bir içinde ve boşluk birleşimi, WhitespaceSignificantCollectionAttribute daha önce açıklanan ilk beyaz boşluk normalleştirmesine neden olur ve bu da bazı konumlarda bir boşluk bırakır ve bu boşluklar korunur ve işlenir. Hangi davranışın sizin için kullanılması gerektiği ve tercih xml:space ettiğiniz davranışı etkinleştirmek için seçime bağlı olarak kullanmanız gerekir.
Ayrıca, akış belge modelinde bir satır sonu ile ilgili bazı satır içi öğeler, bir boşluk açısından önemli bir koleksiyonda bile ek bir boşluk sunmaz. Örneğin, LineBreak Öğesı < HTML 'deki br/Tag ile aynı amaca sahiptir > ve biçimlendirmede okunabilirlik için, genellikle bir LineBreak sonraki metinden yazılmış bir linefeed tarafından ayrılır. Bu satır besleme sonraki satırda önde gelen bir boşluk olacak şekilde normalleştirilmemelidir. Bu davranışı etkinleştirmek için, öğe için sınıf tanımı LineBreak , TrimSurroundingWhitespaceAttribute ardından XAML işlemcisi tarafından, çevresindeki beyaz alanın LineBreak her zaman kırpılmakta olduğu anlamına gelen öğesini uygular.