XamlReader Třída

Definice

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Dědičnost
XamlReader

Příklady

Následující příklad převede řetězec Button pomocí XamlWriter třídy. Řetězec se pak načte zpět do Button statické Load metody ve XamlReader třídě.

// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";

// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);

// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"

' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)

' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)

Poznámky

Synchronní Load metody jsou statické, ale asynchronní LoadAsync metody nejsou statické a vyžadují instanci XamlReader třídy, která se má použít.

Výstupem Load metod je jeden objekt, který představuje kořenový objekt vytvořeného stromu objektů nebo grafu objektu. Objektové grafy vytvořené pomocí XamlReader jsou obvykle přidány do existujícího stromu objektů aplikace WPF za běhu. V opačném případě se nový objektový graf považuje za odpojený pro účely aplikačního modelu WPF. To znamená, že se nevykresluje a nelze k němu přistupovat pomocí žádné techniky stromového stromu objektů, které se použijí pro hlavní strom objektů aplikace WPF (například rozhraní API FindName, LogicalTreeHelper, VisualTreeHelper). Další informace o konceptech stromu objektů naleznete v tématu Stromy ve WPF.

XamlReader podporuje následující primární scénáře:

  • Klonování/objektová továrna: Bez dalších mechanismů nelze obecně zahrnout odkazový typ do více než jedné pozice ve stromu objektů WPF. (Mezi příklady dalších mechanismů, které nabízejí podporu sdílení nebo opětovného použití ve WPF, patří objekty založené na Freezableobjektech nebo podpora běžně sdíletelných objektů, jako Brush jsou odkazy na položku z objektu ResourceDictionary.) Jedním ze způsobů, jak klonovat objekt, který je již ve stromu objektů, je serializovat objekt pomocí XamlWriter.Save. Pak použijete serializovaný řetězec jako vstup pro volání Load, se streamem nebo XmlReader jako zprostředkovatel.

  • Vytváření objektů na základě informací za běhu: Často existují i jiné způsoby, jak změnit stav existujících objektů pozdní vazby nebo zadání uživatelem. Stejnou hodnotu můžete například použít k nastavení více než jedné vlastnosti nebo použití datové vazby. Pokud ale máte scénář, ve kterém je i typ objektu, který se má vytvořit, determinovatelný pouze v době běhu nebo s interakcí uživatele, pak vytvoření takového objektu vytvořením řetězce pro Load vstup je často užitečnou technikou.

  • Použití existujících technik prostředků: Typ Stream se často používá v jiných architekturách nebo technologiích pro přenos dat nebo objektů přes hranice aplikace nebo pro podobné situace. Pomocí Stream technik pak můžete uložit nebo získat data formátovaná XAML, která nakonec použijete k vytvoření objektu v rámci aplikace.

  • Opravené dokumenty: Aplikace může načíst místní nebo stažené dokumenty XPS pro zahrnutí do stromu objektů aplikace WPF a uživatelského rozhraní.

Note

Tato dokumentace někdy popisuje graf objektů, nikoli strom objektů. V relacích objektů doby běhu aplikace WPF v době běhu neexistuje striktní vztah nadřazený-podřízený, takže graf objektů je obecnější terminologií. Vzhledem k tomu, že WPF obsahuje také dvě různá rozhraní API pro konceptualizaci stromu (LogicalTreeHelper, VisualTreeHelper), metafora stromu stále platí adekvátně pro většinu reálných případů ve WPF. Z hlediska jazyka XAML je však graf objektů často nejlepším způsobem, jak se zamyslet nad tím, jak se objekty vytvářejí z XAML, protože samotný jazyk XAML nemusí nutně určovat pomocné metodologie tříd, které přinesou relace více do struktury stromu.

Zabezpečení přístupu kódu, volné XAML a XamlReader

XAML je jazyk využívající značky, který přímo reprezentuje vytváření instancí objektů a jejich spouštění. Proto prvky vytvořené v XAML mají stejnou schopnost pracovat se systémovými prostředky (síťový přístup, vstupně-výstupní operace systému souborů, například) jako ekvivalentní vygenerovaný kód.

WPF podporuje rozhraní .NET Security Code Access Security (CAS). To znamená, že obsah WPF spuštěný v internetové zóně má omezená oprávnění ke spuštění. "Volné XAML" (stránky nekomilovaného XAML interpretovaného při načítání prohlížečem XAML) a aplikace prohlížeče XAML (XBAP) se obvykle spouští v této internetové zóně a používají stejnou sadu oprávnění. Xaml načtený do plně důvěryhodné aplikace má ale stejný přístup k systémovým prostředkům jako hostitelská aplikace. Další informace najdete v tématu Zabezpečení částečné důvěryhodnosti WPF.

Důsledky těchto příkazů XamlReader jsou, že návrh vaší aplikace musí rozhodovat o důvěryhodnosti o xaml, který se rozhodnete načíst. Pokud načítáte XAML, který není důvěryhodný, zvažte implementaci vlastní techniky sandboxu pro načtení výsledného grafu objektu.

XamlReader lze také volat částečným kódem důvěryhodnosti. V tomto případě se pro zabezpečení přístupu kódu použije zóna zabezpečení internetu. Pokud je v zóně zabezpečení internetu neplatný nějaký kód XAML, vyvolá se výjimka analýzy XAML. V rámci XBAP a dalších případů, které jsou částečné důvěryhodnosti na úrovni platformy, kde XamlReader je součástí provádění, získáte stejné chování výjimek jako u explicitních částečných volání důvěryhodnosti.

WPF XAML, čtenáři a zapisovače XAML a správa verzí jazyka XAML

XAML2009 zahrnuje jazykové funkce, jako jsou x:Reference a x:FactoryMethod. Můžete použít podpisy nebo LoadParse načíst XAML, který tyto funkce používá. Tyto jazykové funkce však nejsou podporovány pro XAML, které musí být zkompilovány značek (například XAML pro akci sestavení stránky v aplikaci WPF nebo jakýkoli XAML, který zahrnuje úlohu kompilace značek v akcích sestavení).

Typy WPF a technologie WPF obecně podporují koncepty, které spoléhají na přístup k interním funkcím WPF. Například způsob, jakým WPF implementuje vlastnosti závislostí, závisí na interních technikách efektivního vyhledávání členů typu. Přístup k těmto interním objektům umožňuje rozhraní API pro čtení a zápis XAML, která jsou k dispozici v XamlWriter a XamlReader z System.Windows.Markup oboru názvů a sestavení PresentationFramework. Čtenáři XAML a zapisovače XAML nižší úrovně ze sestavení System.Xaml (třídy založené na System.Xaml.XamlReaderSystem.Xaml.XamlWriter) však nemají přístup k interním objektům WPF. Neexistuje žádná závislost ze System.Xaml na žádné sestavení specifické pro WPF. Bez přístupu k interním prvkům WPF nemohou čtečky System.Xaml a zapisovače správně načíst nebo uložit všechny typy WPF nebo typy založené na typech WPF. Zejména čtenáři a zapisovače System.Xaml nerozumí konceptům, jako je například úložiště vlastností závislostí WPF, nebo všechny specifika způsobu, jakým WPF používá styly, slovníky prostředků a šablony. Proto máte možnost:

  • Pokud načítáte typy WPF a/nebo používáte XAML ve formátu BAML jakýmkoli způsobem, použijte čtečky XAML PresentationFramework a zapisovače XAML.

  • Pokud se nespoléháte na žádné typy WPF nebo formát BAML XAML a nepoužíváte jinou specifickou technologii čtení XAML ani implementaci zapisovače XAML z důvodů, které jsou specifické pro danou architekturu, použijte čtečky Xaml System.Xaml a zapisovače XAML.

Implementace backingu System.Xaml v .NET 4

XamlReader je volatelná plocha rozhraní API pro analyzátor XAML na úrovni architektury WPF. Stejný základní analyzátor XAML také provádí načítání a analýzu XAML za běhu pro aplikace WPF, které cílí na rozhraní .NET Framework 3.0 a .NET Framework 3.5.

Pokud cílíte na rozhraní .NET Framework 4, externí rozhraní API je stejné, ale části implementace jsou založené na obecné implementaci XAML rozhraní .NET Framework 4 v sestavení System.Xaml, což zlepšuje mnoho technických aspektů a vytváření sestav analýzy XAML. Cílení na rozhraní .NET Framework 4 nutně zahrnuje zahrnutí System.Xaml jako odkazu a podrobnosti implementace, jako jsou hlášené výjimky, mohou pocházet z definovaných typů System.Xaml.

Konstruktory

Name Description
XamlReader()

Inicializuje novou instanci XamlReader třídy.

Metody

Name Description
CancelAsync()

Přeruší aktuální asynchronní operaci načítání, pokud čeká asynchronní operace načítání.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
GetWpfSchemaContext()

XamlSchemaContext Vrátí objekt, který představuje nastavení kontextu schématu WPF pro objekt .XamlReader

Load(Stream, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

Load(Stream, ParserContext, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

Load(Stream, ParserContext)

Přečte vstup XAML v zadaném Stream objektu a vrátí objekt, který je kořenem odpovídajícího stromu objektů.

Load(Stream)

Načte vstup XAML v zadaném zadaném StreamObject objektu a vrátí kořen odpovídajícího stromu objektů.

Load(XamlReader)

Načte vstup XAML prostřednictvím zadaného XamlReader objektu a vrátí objekt, který je kořenem odpovídajícího stromu objektů.

Load(XmlReader, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

Load(XmlReader)

Přečte vstup XAML v zadaném XmlReader objektu a vrátí objekt, který je kořenem odpovídajícího stromu objektů.

LoadAsync(Stream, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

LoadAsync(Stream, ParserContext, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

LoadAsync(Stream, ParserContext)

Načte vstup XAML v zadaném zadaném Stream objektu a vrátí kořen odpovídajícího stromu objektů.

LoadAsync(Stream)

Načte vstup XAML v zadaném zadaném Stream objektu a vrátí kořen odpovídajícího stromu objektů.

LoadAsync(XmlReader, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

LoadAsync(XmlReader)

Načte vstup XAML v zadaném zadaném XmlReader objektu a vrátí kořen odpovídajícího stromu objektů.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
Parse(String, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

Parse(String, ParserContext, Boolean)

Přečte vstup XAML a vytvoří graf objektů pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

Parse(String, ParserContext)

Přečte kód XAML v zadaném textovém řetězci (pomocí zadaného ParserContext) a vrátí objekt, který odpovídá kořenovému adresáři zadaného kódu.

Parse(String)

Přečte vstup XAML v zadaném textovém řetězci a vrátí objekt, který odpovídá kořenovému adresáři zadaného kódu.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Událost

Name Description
LoadCompleted

Nastane, když se dokončí asynchronní operace načítání.

Platí pro

Viz také