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

XamlServices , .NET tarafından sunulan ve xaml düğüm akışına veya bu düğümlerden elde edilen XAML türü sistem bilgilerine belirli bir erişim gerektirmeyen XAML senaryolarına yönelik olarak kullanılabilen bir sınıftır. XamlServices API, şu şekilde özetlenebilir: veya bir XAML yükleme yolunu desteklemek, bir xaml LoadParseSave kayıt yolunu desteklemek ve Transform bir yükleme yolunu birleştiren bir teknik sağlamak ve yolu kaydetmek için. Transform , bir XAML şemasından diğerine geçiş yapmak 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 farklılıkları açıklar.

Yükleme

LoadBir yükleme yolu için tüm mantığı uygulayan çeşitli aşırı yüklemeler. Yükleme yolu, XAML 'yi bir biçimde kullanır ve bir XAML düğüm akışı çıkarır. Bu yük yollarının çoğunluğu kodlanmış bir XML metin dosyası biçiminde XAML kullanır. Bununla birlikte, genel bir akış da yükleyebilir veya zaten farklı bir uygulamada bulunan önceden yüklenmiş bir XAML kaynağı yükleyebilirsiniz XamlReader .

Çoğu senaryo için en basit aşırı yükleme vardır Load(String) . Bu aşırı yüklemede, fileName YÜKLENECEK xaml içeren bir metin dosyasının adı olan bir parametre bulunur. Bu, daha önce serileştirilmiş durum veya yerel bilgisayara veri içeren tam güven uygulamaları 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 Framework tanımlı özellikleri tanımlayan standart dosyalardan birini yüklemek istediğiniz çerçeveler için de kullanışlıdır.

Load(Stream) Benzer senaryolar içerir. Bu aşırı yükleme, bir Stream dosya sistemine erişebilen diğer API 'lerin sık karşılaşılan bir çıkışı olduğundan, Kullanıcı yüklenecek dosyaları seçtiğinden yararlı olabilir System.IO . Ya da zaman uyumsuz İndirilenler veya bir akış sağlayan diğer ağ teknikleri aracılığıyla XAML kaynaklarına erişebilirsiniz. (Bir akıştan veya Kullanıcı tarafından seçilen kaynaktan yükleme, güvenlik açısından olumsuz etkileyebilir. Daha fazla bilgi için bkz. xaml güvenlik konuları.)

Load(TextReader) ve Load(XmlReader) önceki .net sürümlerindeki biçimlerin okuyucularına bağlı olan aşırı yüklemelerdir. Bu aşırı yüklemeleri kullanmak için zaten bir okuyucu örneği oluşturmuş ve Create API 'sini ilgili formda (Text veya XML) yüklemek için API 'sini kullanmış olmanız gerekir. Diğer okuyuculardaki kayıt işaretçilerini zaten taşıdıysanız veya başka işlemler gerçekleştirdiyseniz, bu önemli değildir. Yük yolu mantığı Load her zaman kök bilgisayardan tüm XAML girişini işler. Aşağıdaki senaryolar bu aşırı yüklemelerin kullanımını garanti edebilir:

  • Mevcut XML 'e özgü bir metin düzenleyicisinden basit XAML düzenleme özelliği sağladığınız yüzeyler tasarlayın.

  • System.IODosya veya akışları açmak için adanmış okuyucuları kullandığınız temel senaryoların çeşitleri. Mantığınızı XAML olarak yüklemeyi denemeden önce ilkel denetimini veya işlemesini gerçekleştirir.

Bir dosya veya akış yükleyebilir ya da bir XmlReader , veya ' ı TextReader kullanarak, XamlReader okuyucunun API 'LERI ile yükleyerek xaml girişinizi sarmalayan bir, veya yükleyebilirsiniz.

Dahili olarak, önceki aşırı yüklemelerin her biri sonuçta Load(XmlReader)XmlReader Yeni bir oluşturmak için kullanılır XamlXmlReader .

LoadDaha gelişmiş senaryolar için sağlayan imza Load(XamlReader) . Aşağıdaki durumlardan biri için bu imzayı kullanabilirsiniz:

  • Kendi uygulamanızı tanımladınız XamlReader .

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

Varsayılan olmayan ayarların örnekleri:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.

İçin varsayılan okuyucu XamlServicesXamlXmlReader . Ayarları ile kendinizinkini sağlarsanız XamlXmlReader , aşağıdakiler varsayılan olmayan Ayarla özelliği aşağıda verilmiştir XamlXmlReaderSettings :

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

Ayrıştır

Parse , Load xaml GIRIŞINDEN xaml düğüm akışı oluşturan bir yük yolu API 'si olduğundan benzer. Ancak, bu durumda XAML girişi, doğrudan yüklenecek XAML 'yi içeren bir dize olarak sağlanır. Parse , çerçeve senaryolarından uygulama senaryolarında daha uygun olan hafif bir yaklaşımdır. Daha fazla bilgi için bkz. Parse. Parse yalnızca Load(XmlReader) dahili olarak bulunan kaydırılmış bir çağrıdır StringReader .

Kaydet

SaveKayıt yolunu uygulayan çeşitli aşırı yüklemeler. Tüm yöntemlerin hepsi Save giriş olarak bir nesne grafiği alır ve akış, dosya veya örnek olarak çıktı üretir XmlWriter/TextWriter .

Giriş nesnesinin, bazı nesne temsilinin kök nesnesi olması beklenir. Bu, bir iş nesnesinin tek kökü, bir kullanıcı arabirimi senaryosunda bir sayfa için bir nesne ağacının kökü, tasarım aracından çalışma düzenlemesi yüzeyi veya senaryolar için uygun diğer kök nesne kavramları olabilir.

Birçok senaryoda, kaydettiğinizde nesne ağacı, Load bir çerçeve/uygulama modeli tarafından uygulanan DIĞER API ile veya Ile xaml yükleyen bir özgün işlemle ilgilidir. Nesne ağacında durum değişikliği nedeniyle yakalanan farklar olabilir, uygulamanızın çalışma zamanı ayarlarını bir kullanıcıdan yakalandığı yerde değişir, ancak uygulamanız XAML tasarım yüzeyi, vb. olduğundan XAML değiştirilir. Değişiklikler ile veya olmadan, ilk olarak biçimlendirmeden XAML yükleme ve sonra yeniden kaydetme kavramı ve iki XAML biçimlendirme formunu karşılaştırmak, bazen XAML 'nin gidiş dönüş temsili olarak adlandırılır.

Biçimlendirme formunda ayarlanan karmaşık bir nesneyi kaydetme ve serileştirmeyle ilgili zorluk, bilgi kaybı olmayan tam gösterim arasında bir denge elde etmek ve XAML 'in daha az insanlar okunabilir olmasını sağlar. Ayrıca, XAML için farklı müşterilerin, bu Bakiyenin nasıl ayarlanacağı gibi farklı tanımları veya beklentileri olabilir. SaveAPI 'ler bu Bakiyenin bir tanımını temsil eder. SaveAPI 'ler XamlType , XamlMember belirli xaml düğüm akışı yapılarının işaretlere geri kaydedildiklerinde iyileştirilebileceği yerleri tespit etmek IÇIN, kullanılabilir xaml şema bağlamını ve, ve diğer XAML iç ve xaml türü sistem KAVRAMLARıNıN varsayılan clr tabanlı özelliklerini kullanır. Örneğin, XamlServices yolları Kaydet, nesneleri çözümlemek IÇIN clr tabanlı varsayılan xaml şema bağlamını kullanabilir XamlType , bir XamlType.ContentProperty öğesini belirleyebilir ve sonra özelliği nesnenin xaml içeriğine yazarken Özellik öğesi etiketlerini atlayabilir.

Dönüşüm

Transform bir yük yolu ve kayıt yolunu tek bir işlem olarak bağlayarak XAML 'yi dönüştürür veya dönüştürür. Ve için farklı bir şema bağlamı ya da farklı bir yedekleme türü sistemi kullanılabilir XamlReader ve XamlWriter Bu, sonuçta elde edilen xaml 'in nasıl dönüştürüleceklerini etkiler. Bu, geniş dönüştürme işlemleri için iyi bir sonuç verir.

XAML düğüm akışındaki her bir düğümü incelemeyi kullanan işlemler için genellikle kullanmayın Transform . Bunun yerine kendi yük yolunu tanımlamanız gerekir-yolu Kaydet işlem serisini ve kendi mantığınızı kullanabilirsiniz. Yollardan birinde, kendi düğüm döngünüz etrafında XAML okuyucu/XAML yazıcı çifti kullanın. Örneğin, ilk XAML 'yi kullanarak XamlXmlReader ve birbirini izleyen çağrılara sahip düğümlere adım adım yükleyin Read . XAML düğüm akış düzeyinde çalışırken, artık tek düğümleri (türler, Üyeler, diğer düğümler) bir dönüşüm uygulamak veya düğümü olduğu gibi bırakmak için ayarlayabilirsiniz. Daha sonra düğümü ilgili Write API 'sine XamlObjectWriter ve nesnesini yazın. Daha fazla bilgi için bkz. xaml düğüm akışı yapılarını ve kavramlarını anlama.

Ayrıca bkz.