XamlReader Třída

Definice

Přečte vstup XAML a vytvoří graf objektu 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 na Button řetězec pomocí XamlWriter třídy . Řetězec se pak načte zpět do objektu Button pomocí 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 k použití.

Výstupem Load metod je jeden objekt, který představuje kořenový objekt vytvořeného stromu objektů nebo grafu objektů. Grafy objektů vytvořené nástrojem 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ý graf objektů považuje za odpojený pro účely aplikačního modelu WPF. To znamená, že se nevykresluje FindNamea nelze k němu získat přístup pomocí žádné techniky stromu objektů, které jsou použity pro hlavní strom objektů aplikace WPF (například rozhraní API , LogicalTreeHelper, ). VisualTreeHelper Další informace o konceptech stromu objektů najdete v tématu Stromy ve WPF.

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

  • Klonování nebo vytváření objektů: Bez dalších mechanismů obecně nelze typ odkazu zahrnout do více než jedné pozice ve stromu objektů WPF. (Příklady dalších mechanismů, které nabízejí podporu pro sdílení nebo opakované použití ve WPF, zahrnují objekty, které jsou založené na Freezable, nebo podporu pro běžně sdíletelné objekty, jako Brush jsou objekty, které jsou odkazovány jako položka z ResourceDictionary.) Jedním ze způsobů klonování objektu, který je již ve stromu objektů, je serializace objektu pomocí XamlWriter.Save. Potom použijete serializovaný řetězec jako vstup pro volání , Loads datovým proudem nebo XmlReader jako zprostředkující.

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

  • Použití existujících technik prostředků: Typ se Stream často používá v jiných architekturách nebo technologiích pro přenos dat nebo objektů přes hranice aplikace nebo v podobných situacích. Tyto techniky pak můžete použít Stream k uložení nebo získání dat ve formátu XAML, které nakonec použijete k vytvoření objektu jako součásti aplikace.

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

Poznámka

Tato dokumentace někdy popisuje graf objektů na rozdíl od stromu objektů. Striktní vztah nadřazenosti a podřízenosti neexistuje vždy v relacích objektů za běhu aplikace WPF za běhu, 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 případů z reálného světa ve WPF. Z pohledu jazyka XAML je ale graf objektů často nejlepším způsobem, jak se z XAML vytvářejí objekty, protože samotný jazyk XAML nemusí nutně neurčovat pomocné metody tříd, které přinesou vztahy více do stromové struktury.

Zabezpečení přístupu kódu, volný kód 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 mají elementy vytvořené v XAML stejnou schopnost pracovat se systémovými prostředky (například přístup k síti, vstupně-výstupní operace systému souborů) jako ekvivalentní vygenerovaný kód.

WPF podporuje zabezpečení rozhraní .NET 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 nekompilovaného XAML interpretované v době 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 však má stejný přístup k systémovým prostředkům jako hostující aplikace. Další informace najdete v tématu Zabezpečení částečné důvěryhodnosti WPF.

Z těchto příkazů vyplývá XamlReader , že návrh vaší aplikace musí učinit rozhodnutí o důvěryhodnosti kódu 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 objektů.

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

WPF XAML, čtečky/zapisovače XAML a správa verzí jazyka XAML

XAML2009 zahrnuje funkce jazyka, jako jsou x:Reference a x:FactoryMethod. Podpisy LoadParse nebo můžete použít k načtení kódu XAML, který tyto funkce používá. Tyto funkce jazyka však nejsou podporovány pro xaml, který musí být zkompilován značky (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 v obecných konceptech podpory, které spoléhají na přístup k interním prostředím WPF. Například způsob, jakým WPF implementuje vlastnosti závislostí, závisí na interních technikách pro efektivní vyhledávání členů typu. Přístup k těmto interním objektům umožňují 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. Čtečky XAML nižší úrovně a zapisovače XAML ze sestavení System.Xaml (třídy založené na System.Xaml.XamlReader) System.Xaml.XamlWritervšak nemají přístup k interním objektům WPF. Neexistuje žádná závislost z System.Xaml na žádné sestavení WPF specifické. Bez přístupu k interním prvkům WPF nemůžou čtečky a zapisovače System.Xaml 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í wpf závislostí, které se používají, nebo všem specifikům, jak WPF používá styly, slovníky prostředků a šablony. Proto máte na výběr:

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

  • Pokud se nespoléháte na žádné typy WPF nebo baml formu XAML a nepoužíváte čtečku XAML nebo implementaci zapisovače XAML jiné konkrétní technologie z důvodů, které jsou specifické pro danou architekturu, použijte čtečky a zapisovače XAML System.Xaml.

Implementace zálohování 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 postaveny na obecné implementaci XAML rozhraní .NET Framework 4 v sestavení System.Xaml, což vylepšuje mnoho technických aspektů a vytváření sestav parsování 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

XamlReader()

Inicializuje novou instanci XamlReader třídy .

Metody

CancelAsync()

Přeruší aktuální asynchronní operaci načítání, pokud existuje asynchronní operace načítání čekající na vyřízení.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

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

Slouží jako výchozí hashovací funkce.

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

Type Získá z aktuální instance.

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

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

Load(Stream)

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

Load(Stream, Boolean)

Přečte vstup XAML a vytvoří graf objektu 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, ParserContext, Boolean)

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

Load(XamlReader)

Přeč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)

Přečte vstup XAML v zadaném XmlReader 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 objektu pomocí výchozí čtečky XAML WPF a přidruženého zapisovače objektů XAML.

LoadAsync(Stream)

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

LoadAsync(Stream, Boolean)

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

LoadAsync(Stream, ParserContext)

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

LoadAsync(Stream, ParserContext, Boolean)

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

LoadAsync(XmlReader)

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

LoadAsync(XmlReader, Boolean)

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

MemberwiseClone()

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

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

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

Parse(String, Boolean)

Přečte vstup XAML a vytvoří graf objektu 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, ParserContext, Boolean)

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

ToString()

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

(Zděděno od Object)

Událost

LoadCompleted

Vyvolá se při dokončení asynchronní operace načítání.

Platí pro

Viz také