XAMLServices sınıfı ve temel XAML okuma veya yazma

XamlServices , .NET tarafından sağlanan ve XAML düğüm akışına veya bu düğümlerden alınan XAML türü sistem bilgilerine özel erişim gerektirmeyen XAML senaryolarını ele almak için kullanılabilen bir sınıftır. XamlServices API şu şekilde özetlenebilir: Load veya Parse bir XAML yükleme yolunu desteklemek, Save XAML kaydetme yolunu desteklemek ve Transform bir yük yolunu birleştiren ve yolu kaydeden bir teknik sağlamak için. Transform bir XAML şemasından diğerine geçmek için kullanılabilir. Bu konu, bu API sınıflandırmalarının her birini özetler ve belirli yöntem aşırı yüklemeleri arasındaki farkları açıklar.

Yükleme

çeşitli aşırı yüklemeleri Load , bir yük yolu için tam mantığı uygular. Yük yolu bir biçimde XAML kullanır ve bir XAML düğüm akışı oluşturur. Bu yük yollarının çoğu kodlanmış XML metin dosyası formunda XAML kullanır. Bununla birlikte, genel bir akış da yükleyebilir veya farklı XamlReader bir uygulamada zaten bulunan önceden yüklenmiş bir XAML kaynağını yükleyebilirsiniz.

Çoğu senaryo için en basit aşırı yükleme şudur: Load(String). Bu aşırı yükleme, yüklenecek XAML'yi içeren bir metin dosyasının adı olan bir parametreye sahiptir fileName . Bu, daha önce durumu serileştirilmiş tam güven uygulamaları veya yerel bilgisayara veri gibi uygulama senaryoları için uygundur. Bu, uygulama modelini tanımladığınız ve uygulama davranışını, kullanıcı arabirimini veya XAML kullanan diğer çerçeve tanımlı özellikleri tanımlayan standart dosyalardan birini yüklemek istediğiniz çerçeveler için de kullanışlıdır.

Load(Stream) benzer senaryolara sahiptir. Bu aşırı yükleme, kullanıcının yüklenecek dosyaları seçmesini sağlarsanız yararlı olabilir, çünkü bir Stream dosya sistemine erişebilecek diğer System.IO API'lerin sık sık çıkışıdır. Ya da zaman uyumsuz indirmeler veya akış sağlayan diğer ağ teknikleri aracılığıyla XAML kaynaklarına erişiyor olabilirsiniz. (Akıştan veya kullanıcı tarafından seçilen bir kaynaktan yüklemenin güvenlik açısından etkileri olabilir. Daha fazla bilgi için bkz . XAML Güvenlik Konuları.)

Load(TextReader) ve Load(XmlReader) .NET'in önceki sürümlerindeki biçim okuyucularını kullanan aşırı yüklemelerdir. Bu aşırı yüklemeleri kullanmak için zaten bir okuyucu örneği oluşturmuş ve api'sini Create kullanarak XAML'yi ilgili forma (metin veya XML) yüklemiş olmanız gerekir. Kayıt işaretçilerini diğer okuyucularda zaten taşıdıysanız veya bunlarla başka işlemler gerçekleştirdiyseniz, bu önemli değildir. yük yolu mantığı Load her zaman kökten XAML girişinin tamamını işler. Aşağıdaki senaryolar bu aşırı yüklemelerin kullanılmasını garanti edebilir:

  • Tasarım, mevcut XML'ye özgü bir metin düzenleyicisinden basit XAML düzenleme özelliği sağladığınız yüzeyleri oluşturur.

  • Dosyaları veya akışları açmak için ayrılmış okuyucuları kullandığınız temel System.IO senaryoların çeşitleri. Mantığınız, XAML olarak yüklenmeye çalışilmeden önce ilkel denetim veya içerik işleme gerçekleştirir.

Bir dosya veya akış yükleyebilir ya da okuyucunun API'leriyle yükleyerek XAML girişinizi sarmalayan bir XmlReader, TextReaderveya XamlReader yükleyebilirsiniz.

Dahili olarak, önceki aşırı yüklemelerin her biri nihai olarak Load(XmlReader)ve geçirilen XmlReader yeni XamlXmlReaderbir oluşturmak için kullanılır.

Daha Load gelişmiş senaryolar için sağlayan imzadır Load(XamlReader). Bu imzayı aşağıdaki durumlardan biri için kullanabilirsiniz:

  • Kendi uygulamanızı XamlReadertanımladıysanız.

  • Varsayılan ayarlardan farklı olan ayarları XamlReader belirtmeniz gerekir.

Varsayılan olmayan ayarlara örnekler:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.

için XamlServices varsayılan okuyucudur XamlXmlReader. Kendi ayarlarınızı sağlarsanız XamlXmlReader , varsayılan XamlXmlReaderSettingsolmayan ayarların özellikleri şunlardır:

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

Çözümle

Parse XAML girişinden bir XAML düğüm akışı oluşturan bir yük yolu API'si olması gibi Load bir durumdur. Ancak bu durumda, XAML girişi doğrudan yüklenecek tüm XAML'yi içeren bir dize olarak sağlanır. Parse , uygulama senaryoları için çerçeve senaryolarına göre daha uygun olan basit bir yaklaşımdır. Daha fazla bilgi için bkz. Parse. Parse yalnızca dahili olarak bir içeren sarmalanmış Load(XmlReader) bir StringReader çağrıdır.

Kaydet

Çeşitli aşırı yüklemeleri Save kaydetme yolunu uygular. Save Tüm yöntemler bir nesne grafını giriş olarak alır ve çıktıyı akış, dosya veya XmlWriter/TextWriter örnek olarak üretir.

Giriş nesnesinin, bazı nesne gösteriminin kök nesnesi olması beklenir. Bu, bir iş nesnesinin tek kökü, kullanıcı arabirimi senaryosundaki bir sayfanın nesne ağacının kökü, tasarım aracından çalışma düzenleme yüzeyi veya senaryolara uygun diğer kök nesne kavramları olabilir.

Birçok senaryoda, kaydettiğiniz nesne ağacı bir çerçeve/uygulama modeli tarafından uygulanan diğer API'lerle Load veya XAML'yi yükleyen özgün bir işlemle ilgilidir. Nesne ağacında yakalanan farklar durum değişiklikleri, uygulamanızın bir kullanıcıdan çalışma zamanı ayarlarını yakaladığı değişiklikler, uygulamanız bir XAML tasarım yüzeyi olduğu için XAML'yi değiştirme vb. olabilir. Değişiklik olsun veya olmasın, önce XAML'yi işaretlemeden yükleme ve sonra yeniden kaydetme ve iki XAML işaretleme formlarını karşılaştırma kavramı bazen XAML'nin gidiş dönüş gösterimi olarak adlandırılır.

İşaretleme formunda ayarlanan karmaşık bir nesneyi kaydetme ve seri hale getirmenin zorluğu, bilgi kaybı olmadan tam temsil arasında denge elde etmek ve XAML'yi daha az insan tarafından okunabilir hale getiren ayrıntı düzeyine ulaşmaktır. Ayrıca, XAML için farklı müşterilerin bu bakiyenin nasıl ayarlanması gerektiğine ilişkin farklı tanımları veya beklentileri olabilir. API'ler Save bu bakiyenin bir tanımını temsil gelir. API'lerSave, belirli XAML düğümü akış yapılarının XamlTypeXamlMemberişaretlemeye geri kaydedildiğinde nerede iyileştirilebileceğini belirlemek için kullanılabilir XAML şema bağlamını ve varsayılan CLR tabanlı özelliklerini ve diğer XAML iç ve XAML türü sistem kavramlarını kullanır. Örneğin, XamlServices kaydetme yolları nesneleri çözümlemek XamlType için CLR tabanlı varsayılan XAML şeması bağlamını kullanabilir, bir XamlType.ContentPropertybelirleyebilir ve ardından özelliği nesnenin XAML içeriğine yazarken özellik öğesi etiketlerini atlayabilir.

Dönüşüm

Transform bir yük yolunu ve kaydetme yolunu tek bir işlem olarak bağlayarak XAML'yi dönüştürür veya dönüştürür. ve XamlWriteriçin XamlReader farklı bir şema bağlamı veya farklı bir yedekleme türü sistemi kullanılabilir. Bu, sonuçta elde edilen XAML'nin nasıl dönüştürülmesini etkiler. Bu, geniş dönüşüm işlemleri için iyi çalışır.

Bir XAML düğüm akışındaki her düğümü incelemeyi kullanan işlemler için genellikle kullanmazsınız Transform. Bunun yerine kendi yük yolu kaydetme yol işlemi serinizi tanımlamanız ve kendi mantığınızı araya almanız gerekir. Yollardan birinde, kendi düğüm döngünüz etrafında bir XAML okuyucu/XAML yazıcı çifti kullanın. Örneğin, kullanarak XamlXmlReader ilk XAML'yi yükleyin ve ardışık Read çağrılarla düğümlere adım atın. XAML düğümü akış düzeyinde çalışırken artık tek tek düğümleri (türler, üyeler, diğer düğümler) dönüştürme uygulayacak şekilde ayarlayabilir veya düğümü olduğu gibi bırakabilirsiniz. Ardından düğümü ilgili api'sine WriteXamlObjectWriter gönderir ve nesnesini yazarsınız. Daha fazla bilgi için bkz . XAML Düğümü Akış Yapılarını ve Kavramlarını Anlama.

Ayrıca bkz.