Třída XAMLServices a základní čtení nebo zápis XAML

XamlServices je třída poskytovaná rozhraním .NET, kterou lze použít k řešení scénářů XAML, které nevyžadují specifický přístup ke streamu uzlu XAML nebo k systémovým informacím o typu XAML získaným z těchto uzlů. XamlServices Rozhraní API lze shrnout takto: Load nebo Parse podporovat cestu načtení XAML, Save podporovat cestu k uložení XAML a Transform poskytnout techniku, která spojuje cestu načtení a cestu k uložení. Transform lze použít ke změně z jednoho schématu XAML na jiné. Toto téma shrnuje každou z těchto klasifikací rozhraní API a popisuje rozdíly mezi určitými přetíženími metod.

Načítání

Různá přetížení implementace úplné logiky Load pro cestu načtení. Cesta načtení používá XAML v některých formulářích a vypíše datový proud uzlu XAML. Většina z těchto cest načítání používá XAML ve formuláři kódovaného textového souboru XML. Můžete ale také načíst obecný datový proud nebo můžete načíst předem načtený zdroj XAML, který je již obsažen v jiné XamlReader implementaci.

Nejjednodušší přetížení pro většinu scénářů je Load(String). Toto přetížení má fileName parametr, který je jednoduše názvem textového souboru, který obsahuje XAML k načtení. To je vhodné pro scénáře aplikací, jako jsou úplné důvěryhodné aplikace, které mají dříve serializovaný stav nebo data do místního počítače. To je také užitečné pro architektury, ve kterých definujete aplikační model a chcete načíst jeden ze standardních souborů, které definují chování aplikace, spouštění uživatelského rozhraní nebo jiné funkce definované architekturou, které používají XAML.

Load(Stream) má podobné scénáře. Toto přetížení může být užitečné, pokud máte uživatelem zvolit soubory k načtení, protože Stream je častým výstupem jiných System.IO rozhraní API, která mají přístup k systému souborů. Nebo můžete přistupovat ke zdrojům XAML prostřednictvím asynchronních stahování nebo jiných síťových technik, které také poskytují datový proud. (Načtení ze streamu nebo vybraného zdroje uživatelem může mít vliv na zabezpečení. Další informace najdete v tématu Aspekty zabezpečení XAML.)

Load(TextReader) a Load(XmlReader) jsou přetížení, která spoléhají na čtenáře formátů z předchozích verzí .NET. Pokud chcete použít tato přetížení, měli byste už vytvořit instanci čtenáře a použít jeho Create rozhraní API k načtení XAML v příslušném formuláři (text nebo XML). Pokud jste už přesunuli ukazatele záznamů v ostatních čtenářích nebo s nimi provedli jiné operace, není to důležité. Logika cesty načítání vždy Load zpracovává celý vstup XAML z kořenového adresáře. Následující scénáře mohou zaručovat použití těchto přetížení:

  • Návrhové plochy, ve kterých poskytujete jednoduchou funkci úprav XAML z existujícího textového editoru specifického pro XML.

  • Varianty základních System.IO scénářů, kdy k otevírání souborů nebo datových proudů používáte vyhrazené čtenáře. Vaše logika provádí základní kontrolu nebo zpracování obsahu předtím, než se pokusí načíst jako XAML.

Můžete buď načíst soubor nebo datový proud, nebo můžete načíst XmlReaderTextReader, nebo XamlReader který zabalí vstup XAML načtením pomocí rozhraní API čtenáře.

Interně, každý z předchozích přetížení je nakonec Load(XmlReader)a předán XmlReader se používá k vytvoření nového XamlXmlReader.

Podpis Load , který poskytuje pokročilejší scénáře, je Load(XamlReader). Tento podpis můžete použít pro jeden z následujících případů:

  • Definovali jste vlastní implementaci .XamlReader

  • Musíte zadat nastavení, XamlReader která se liší od výchozího nastavení.

Příklady jiných než výchozích nastavení:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.

Výchozí čtečka XamlServices je XamlXmlReader. Pokud zadáte vlastní XamlXmlReader nastavení, následující vlastnosti jsou nastaveny mimo výchozí XamlXmlReaderSettingsnastavení:

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

Rozložit

Parse je to jako Load proto, že se jedná o rozhraní API pro načtení cesty, které vytváří datový proud uzlu XAML ze vstupu XAML. V tomto případě je však vstup XAML poskytován přímo jako řetězec, který obsahuje veškerý XAML, který se má načíst. Parse je jednoduchý přístup, který je vhodnější pro scénáře aplikací než scénáře architektury. Další informace najdete na webu Parse. Parse je jen zabalené Load(XmlReader) volání, které zahrnuje StringReader interně.

Uložit

Různá přetížení Save implementace cesty pro uložení. Save Všechny metody přebírají objektový graf jako vstup a vytvářejí výstup jako datový proud, soubor nebo XmlWriter/TextWriter instanci.

Očekává se, že vstupní objekt bude kořenovým objektem určité reprezentace objektu. Může se jednat o jediný kořen obchodního objektu, kořen stromu objektů pro stránku ve scénáři uživatelského rozhraní, pracovní plochu pro úpravy z návrhového nástroje nebo jiné koncepty kořenových objektů, které jsou vhodné pro scénáře.

V mnoha scénářích souvisí strom objektů, který uložíte, s původní operací, která načetla XAML buď s Load jiným rozhraním API implementovaným modelem architektury nebo aplikace, nebo s jiným rozhraním API. Ve stromu objektů můžou být zachycené rozdíly, které jsou způsobeny změnami stavu, změnami, kdy aplikace zachytila nastavení modulu runtime od uživatele, změnila XAML, protože vaše aplikace je návrhová plocha XAML atd. Při změně nebo bez nich se koncept prvního načtení XAML z revize a jeho následné opětovné uložení a porovnání dvou formulářů značek XAML se někdy označuje jako reprezentace XAML zaokrouhlit.

Problém s uložením a serializací složitého objektu, který je nastaven ve formuláři revize, spočívá v dosažení rovnováhy mezi úplnou reprezentací bez ztráty informací a podrobností, díky čemuž je XAML méně čitelný pro člověka. Kromě toho můžou mít různí zákazníci pro XAML různé definice nebo očekávání, jak by se měl tento zůstatek nastavit. Rozhraní Save API představují jednu definici tohoto zůstatku. Rozhraní Save API používají dostupný kontext schématu XAML a výchozí charakteristiky XamlTypezaložené na clr a XamlMemberdalší koncepty systému typů XAML a určit, kde lze určité konstrukty streamu uzlu XAML optimalizovat při jejich uložení zpět do značek. Například XamlServices cesty pro ukládání můžou použít výchozí kontext schématu XAML založený na CLR k překladu XamlType objektů, může určit XamlType.ContentPropertya pak může vynechat značky elementu vlastnosti při zápisu vlastnosti do obsahu XAML objektu.

Transformace

Transform převede nebo transformuje XAML propojením cesty načtení a cesty pro uložení jako jedinou operací. Lze použít XamlReader jiný kontext schématu nebo jiný systém typů backingu a XamlWriterto má vliv na to, jak se výsledný kód XAML transformuje. To funguje dobře pro rozsáhlé transformační operace.

Pro operace, které spoléhají na zkoumání každého uzlu ve streamu uzlu XAML, obvykle nepoužíváte Transform. Místo toho je potřeba definovat vlastní řadu operací ukládání cest pro načtení a interject vlastní logiku. V jedné z cest použijte dvojici pro čtení XAML nebo zapisovač XAML kolem vlastní smyčky uzlu. Například načtěte počáteční XAML pomocí XamlXmlReader a krokujte do uzlů s následnými Read voláními. Provoz na úrovni datového proudu uzlu XAML teď můžete upravit jednotlivé uzly (typy, členy, další uzly), aby se použila transformace, nebo ponechat uzel tak, jak je. Pak odešlete uzel dál do příslušného Write rozhraní API objektu XamlObjectWriter a zapíšete objekt. Další informace najdete v tématu Principy struktur a konceptů datových proudů uzlů XAML.

Viz také