XamlReader Classe

Definizione

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Ereditarietà
XamlReader

Esempio

Nell'esempio seguente un oggetto viene Button convertito in una stringa usando la XamlWriter classe . La stringa viene quindi caricata nuovamente in un Button utilizzando il metodo statico Load nella XamlReader classe .

// 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)

Commenti

I metodi sincroni Load sono statici, ma i metodi asincroni LoadAsync non sono statici e richiedono un'istanza della XamlReader classe da usare.

L'output dei Load metodi è un singolo oggetto, che rappresenta l'oggetto radice di un albero di oggetti creato o di un oggetto grafico. Gli oggetti grafici creati da XamlReader vengono in genere aggiunti all'albero di oggetti esistente di un'applicazione WPF in fase di esecuzione. In caso contrario, il nuovo oggetto grafico viene considerato disconnesso ai fini del modello di applicazione WPF. Ciò significa che non viene eseguito il rendering e non è possibile accedervi usando alcuna delle tecniche della struttura ad albero degli oggetti applicata all'albero principale dell'applicazione WPF ( ad esempio, le API FindName, , VisualTreeHelperLogicalTreeHelper). Per altre informazioni sui concetti relativi all'albero degli oggetti, vedere Alberi in WPF.

XamlReader supporta gli scenari principali seguenti:

  • Clonazione/object factory: senza meccanismi aggiuntivi, un tipo riferimento in genere non può essere incluso in più posizioni in una struttura ad albero di oggetti WPF. Esempi di meccanismi aggiuntivi che offrono supporto per la condivisione o la riesezione in WPF includono oggetti basati su Freezableo il supporto per oggetti comunemente condivisibili, ad Brush esempio a cui viene fatto riferimento come elemento da un oggetto ResourceDictionary. Un modo per clonare un oggetto già presente nell'albero degli oggetti consiste nel serializzare l'oggetto usando XamlWriter.Save. Si usa quindi la stringa serializzata come input per una chiamata a Load, con un flusso o XmlReader come intermediario.

  • Creazione di oggetti basati su informazioni JITE: spesso esistono altri modi per impostare l'input con associazione tardiva o fornita dall'utente per modificare lo stato degli oggetti esistenti. Ad esempio, è possibile usare lo stesso valore per impostare più proprietà o usare il data binding. Tuttavia, se si dispone di uno scenario in cui anche il tipo di oggetto da creare è determinabile solo in fase di esecuzione o con l'interazione dell'utente, la creazione di tale oggetto creando una stringa per Load l'input è spesso una tecnica utile.

  • Uso di tecniche di risorse esistenti: il Stream tipo viene usato spesso in altri framework o tecnologie per il trasferimento di dati o oggetti attraverso i limiti dell'applicazione o per situazioni simili. Puoi quindi usare le Stream tecniche per archiviare o ottenere dati in formato XAML che usi per creare un oggetto come parte dell'applicazione.

  • Documenti fissi: L'applicazione potrebbe caricare documenti XPS locali o scaricati per l'inclusione in un albero di oggetti dell'applicazione WPF e in un'interfaccia utente.

Nota

Questa documentazione descrive talvolta un oggetto grafico, anziché un albero di oggetti. Una relazione padre-figlio rigorosa non esiste sempre nelle relazioni tra oggetti di runtime di un'applicazione WPF in fase di esecuzione, quindi un oggetto grafico è una terminologia più ampiamente applicabile. Tuttavia, poiché WPF include anche due API di concettualizzazione ad albero diverse (LogicalTreeHelper, VisualTreeHelper) la metafora dell'albero si applica ancora in modo adeguato alla maggior parte dei casi reali in WPF. Dal punto di vista del linguaggio XAML, tuttavia, il grafico degli oggetti è spesso il modo migliore per pensare al modo in cui gli oggetti vengono creati da XAML, perché il linguaggio XAML stesso non specifica necessariamente metodologie di classe helper che portano di nuovo le relazioni in una struttura ad albero.

Sicurezza dell'accesso al codice, XAML libero e XamlReader

XAML è un linguaggio di markup che rappresenta direttamente la creazione di istanze di oggetti e la relativa esecuzione. Gli elementi creati in XAML, pertanto, hanno la stessa capacità di interagire con risorse di sistema (quali accesso di rete e IO file system) del codice generato equivalente.

WPF supporta .NET Security Framework Code Access Security (CAS). Ciò significa che il contenuto WPF in esecuzione nell'area Internet ha autorizzazioni di esecuzione ridotte. "XAML libero" (pagine di XAML non compilato interpretate in fase di caricamento da un visualizzatore XAML) e l'applicazione browser XAML (XBAP) vengono in genere eseguite in questa area Internet e usano lo stesso set di autorizzazioni. Il codice XAML caricato in un'applicazione completamente attendibile, tuttavia, dispone dello stesso accesso alle risorse di sistema dell'applicazione host. Per altre informazioni, vedere Sicurezza con attendibilità parziale in WPF.

Le implicazioni di queste istruzioni per XamlReader è che la progettazione dell'applicazione deve prendere decisioni di attendibilità sul codice XAML che si decide di caricare. Se stai caricando XAML non attendibile, valuta la possibilità di implementare una tecnica di sandboxing personalizzata per il caricamento del grafico degli oggetti risultante.

XamlReader può anche essere chiamato da codice di attendibilità parziale. In questo caso, l'area di sicurezza Internet viene applicata per la sicurezza dell'accesso al codice. Se un elemento nel codice XAML caricato non è valido nell'area di sicurezza Internet, viene generata un'eccezione di analisi XAML. In XBAP e in altri casi con attendibilità parziale a livello di piattaforma, dove XamlReader fa parte dell'esecuzione, si ottiene lo stesso comportamento di eccezione di con chiamate di attendibilità parziale esplicite.

XAML WPF, lettori/writer XAML e controllo delle versioni del linguaggio XAML

XAML2009 include funzionalità del linguaggio come x:Reference e x:FactoryMethod. Puoi usare le firme di Load o Parse per caricare XAML che usa queste funzionalità. Tuttavia, tali funzionalità del linguaggio non sono supportate per XAML che devono essere compilate tramite markup, ad esempio XAML per l'azione di compilazione Pagina in un'applicazione WPF o qualsiasi xaml che coinvolge l'attività di compilazione del markup nelle azioni di compilazione.

I tipi WPF e la tecnologia WPF in generale supportano concetti che si basano sull'accesso agli elementi interni WPF. Ad esempio, il modo in cui WPF implementa le proprietà di dipendenza si basa su tecniche interne per una ricerca efficiente dei membri di tipo. L'accesso a questi elementi interni è abilitato dalle API di lettura e scrittura XAML fornite in XamlWriter e XamlReader dallo spazio dei nomi e dall'assembly System.Windows.Markup PresentationFramework. Tuttavia, i lettori XAML di livello inferiore e i writer XAML dell'assembly System.Xaml (classi basate su System.Xaml.XamlReader, System.Xaml.XamlWriter) non hanno accesso agli elementi interni WPF. Non esiste alcuna dipendenza da System.Xaml a qualsiasi assembly specifico di WPF. Senza l'accesso agli elementi interni WPF, i lettori e i writer System.Xaml non possono caricare o salvare correttamente tutti i tipi WPF o i tipi basati su tipi WPF. In particolare, i lettori e i writer System.Xaml non comprendono concetti come l'archivio delle proprietà di dipendenza WPF o tutte le specifiche del modo in cui WPF usa stili, dizionari risorse e modelli. Di conseguenza, è possibile scegliere di:

  • Se si caricano tipi WPF e/o si usa XAML in formato BAML in qualsiasi modo, usare i lettori XAML PresentationFramework e i writer XAML.

  • Se non ci si basa su alcun tipo WPF o sul formato BAML di XAML e non si usa un'altra implementazione del lettore XAML o del writer XAML specifico per motivi specifici di tale framework, usare i lettori XAML e i writer XAML di System.Xaml.

Implementazione del backing System.Xaml in .NET 4

XamlReader è la superficie API chiamabile per il parser XAML a livello di framework WPF. Lo stesso parser XAML sottostante esegue anche il caricamento e l'analisi XAML in fase di esecuzione per le applicazioni WPF destinate a .NET Framework 3.0 e .NET Framework 3.5.

Se la destinazione è .NET Framework 4, l'API esterna è la stessa, ma parti dell'implementazione sono basate sull'implementazione XAML generale di .NET Framework 4 nell'assembly System.Xaml, che migliora molti degli aspetti tecnici e di creazione di report dell'analisi di XAML. La destinazione di .NET Framework 4 comporta necessariamente l'inclusione di System.Xaml come riferimento e i dettagli dell'implementazione, ad esempio le eccezioni segnalate, possono provenire da tipi definiti da System.Xaml.

Costruttori

XamlReader()

Inizializza una nuova istanza della classe XamlReader.

Metodi

CancelAsync()

Interrompe l'operazione di caricamento asincrona corrente, se ne è presente una in sospeso.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetWpfSchemaContext()

Restituisce un oggetto XamlSchemaContext che rappresenta le impostazioni del contesto dello schema WPF per un XamlReader.

Load(Stream)

Legge l'input XAML nell'oggetto Stream specificato e restituisce un Object che sarà la radice della struttura ad albero di oggetti corrispondente.

Load(Stream, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

Load(Stream, ParserContext)

Legge l'input XAML nell'oggetto Stream specificato e restituisce un oggetto che sarà la radice della struttura ad albero di oggetti corrispondente.

Load(Stream, ParserContext, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

Load(XamlReader)

Legge l'input XAML tramite un oggetto XamlReader specificato e restituisce un oggetto che sarà la radice della struttura ad albero di oggetti corrispondente.

Load(XmlReader)

Legge l'input XAML nell'oggetto XmlReader specificato e restituisce un oggetto che sarà la radice della struttura ad albero di oggetti corrispondente.

Load(XmlReader, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

LoadAsync(Stream)

Legge l'input XAML nell'oggetto Stream specificato e restituisce la radice della struttura ad albero di oggetti corrispondente.

LoadAsync(Stream, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

LoadAsync(Stream, ParserContext)

Legge l'input XAML nell'oggetto Stream specificato e restituisce la radice della struttura ad albero di oggetti corrispondente.

LoadAsync(Stream, ParserContext, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

LoadAsync(XmlReader)

Legge l'input XAML nell'oggetto XmlReader specificato e restituisce la radice della struttura ad albero di oggetti corrispondente.

LoadAsync(XmlReader, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Parse(String)

Legge l'input XAML nella stringa di testo specificata e restituisce un oggetto corrispondente alla radice del markup specificato.

Parse(String, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

Parse(String, ParserContext)

Legge il markup XAML nella stringa di testo specificata, utilizzando un oggetto ParserContext specificato, e restituisce un oggetto corrispondente alla radice del markup specificato.

Parse(String, ParserContext, Boolean)

Legge l'input XAML e crea un oggetto grafico utilizzando il reader XAML predefinito di WPF e un writer di oggetti XAML associato.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Eventi

LoadCompleted

Si verifica al completamento di un'operazione di caricamento asincrona.

Si applica a

Vedi anche