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.Reads XAML input and creates an object graph, using the WPF default XAML reader and an associated XAML object writer.

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

Esempi

Nell'esempio seguente un oggetto Button viene convertito in una stringa XamlWriter utilizzando la classe.The following example converts a Button into a string using the XamlWriter class. La stringa viene quindi ricaricata in Button un oggetto usando Load il metodo statico XamlReader sulla classe.The string is then loaded back into a Button using the static Load method on the XamlReader class.

// 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 Load sincroni sono statici, ma i metodi LoadAsync asincroni non sono statici e XamlReader richiedono un'istanza della classe da usare.The synchronous Load methods are static, but the asynchronous LoadAsync methods are not static and require an instance of the XamlReader class to use.

L'output dei Load metodi è un singolo oggetto, che rappresenta l'oggetto radice di una struttura ad albero di oggetti creata o di un oggetto grafico.The output of the Load methods is a single object, which represents the root object of a created object tree or object graph. Gli oggetti grafici creati da XamlReader vengono in genere aggiunti alla struttura ad albero di oggetti esistente di un'applicazione WPF in fase di esecuzione.Object graphs that are created by XamlReader are typically added to the existing object tree of a WPF application at run time. In caso contrario, il nuovo oggetto grafico viene considerato disconnesso per finalità del modello di applicazione WPF.Otherwise the new object graph is considered disconnected for purposes of the WPF application model. Ciò significa che non viene eseguito il rendering e non è possibile accedervi utilizzando una delle tecniche dell'albero degli oggetti applicate all'albero degli oggetti principale dell'applicazione WPF (ad esempio, FindNamele LogicalTreeHelperAPI VisualTreeHelper,,).This means that it does not render, and cannot be accessed using any of the object tree techniques as applied to the WPF application's main object tree (for example, the APIs FindName, LogicalTreeHelper, VisualTreeHelper). Per ulteriori informazioni sui concetti relativi alla struttura ad albero di oggetti, vedere strutture ad albero in WPF.For more information on object tree concepts, see Trees in WPF.

XamlReadersupporta gli scenari principali seguenti:XamlReader supports the following primary scenarios:

  • Clonazione/Object Factory: Senza meccanismi aggiuntivi, in genere un tipo di riferimento non può essere incluso in più di una posizione in una struttura ad albero di oggetti WPF.Cloning/object factory: Without additional mechanisms, a reference type generally cannot be included in more than one position in a WPF object tree. (Esempi di meccanismi aggiuntivi che offrono supporto per la condivisione o il riutilizzo in WPF includono gli oggetti basati su Freezableo il supporto per gli oggetti condivisibili di frequente Brush , ad esempio a cui viene fatto riferimento come ResourceDictionaryun elemento da un). Un modo per clonare un oggetto già presente nell'albero degli oggetti consiste nel serializzare l'oggetto XamlWriter.Saveusando.(Examples of additional mechanisms that offer support for sharing or re-use in WPF include objects that are based on Freezable, or support for commonly shareable objects such as Brush that are referenced as an item from a ResourceDictionary.) One way to clone an object that is already in the object tree is to serialize the object using XamlWriter.Save. Si utilizza quindi la stringa serializzata come input per una chiamata a Load, con un flusso o XmlReader come intermediario.You then use the serialized string as input for a call to Load, with a stream or XmlReader as an intermediary.

  • Creazione di oggetti in base alle informazioni just-in-Time: Ci sono spesso altri modi per fare in modo che l'associazione tardiva o l'input fornito dall'utente modifichi lo stato degli oggetti esistenti.Constructing objects based on just-in-time information: There are often other ways to have late-binding or user-supplied input change the state of existing objects. Ad esempio, è possibile usare lo stesso valore per impostare più di una proprietà o usare data binding.For example you could use the same value to set more than one property, or use data binding. Tuttavia, se si dispone di uno scenario in cui anche il tipo di oggetto da creare è deterministico solo in fase di esecuzione o con l'interazione dell'utente, la creazione di tale oggetto tramite Load la compilazione di una stringa per l'input è spesso una tecnica utile.But if you have a scenario where even the type of object to create is only determinable at run time or with user interaction, then creating such an object by building up a string for Load input is often a useful technique.

  • Uso delle tecniche delle risorse esistenti: Il Stream tipo viene usato di frequente in altri Framework o tecnologie per il trasferimento di dati o oggetti tra i limiti dell'applicazione o per situazioni analoghe.Using existing resource techniques: The Stream type is used frequently in other frameworks or technologies for transferring data or objects across application boundaries or for similar situations. È quindi possibile usare le Stream tecniche per archiviare o ottenere dati in formato XAML che verranno usati per creare un oggetto come parte dell'applicazione.You can then use the Stream techniques to store or obtain XAML-formatted data that you eventually use to create an object as part of your application.

  • Documenti corretti: L'applicazione potrebbe caricare documenti XPS locali o scaricati per l'inclusione in un albero degli oggetti dell'applicazione WPF e nell'interfaccia utente.Fixed documents: Your application might load local or downloaded XPS documents for inclusion in a WPF application object tree and UI.

Nota

In questa documentazione viene talvolta descritto un oggetto grafico, anziché un albero di oggetti.This documentation sometimes describes an object graph, as opposed to an object tree. Una relazione padre-figlio Strict non è sempre presente nelle relazioni tra oggetti runtime di un'applicazione WPF in fase di esecuzione, pertanto un oggetto grafico è una terminologia più ampia applicabile.A strict parent-child relationship does not always exist in the run time object relationships of a run time WPF application, so an object graph is a more widely applicable terminology. Tuttavia, poiché WPF include anche due diverse API di concettualizzazione dell'LogicalTreeHelperalbero VisualTreeHelper(,) la metafora dell'albero è ancora applicabile in modo adeguato alla maggior parte dei casi reali in WPF.However, because WPF also includes two different tree conceptualization APIs (LogicalTreeHelper, VisualTreeHelper) the tree metaphor still applies adequately to most real-world cases in WPF. Dal punto di vista del linguaggio XAML, tuttavia, l'oggetto grafico è spesso il modo migliore per considerare il modo in cui gli oggetti vengono creati da XAML, perché il linguaggio XAML stesso non specifica necessariamente le metodologie della classe helper che riportano le relazioni in un struttura ad albero.From the XAML language perspective however, the object graph is often the best way to think about how objects are created out of XAML, because the XAML language itself does not necessarily specify helper class methodologies that bring the relationships more into a tree structure again.

Sicurezza dall'accesso di codice, XAML separato e XamlReaderCode Access Security, Loose XAML, and XamlReader

XAML è un linguaggio di markup che rappresenta direttamente la creazione di istanze di oggetti e la relativa esecuzione.XAML is a markup language that directly represents object instantiation and execution. 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.Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPFsupporta il .NET.NET Framework Sicurezza per l'accesso al codice (CAS, Code Access Security)Code Access Security (CAS)di sicurezza.supports the .NET.NET security framework Sicurezza per l'accesso al codice (CAS, Code Access Security)Code Access Security (CAS). Di conseguenza, il contenuto WPFWPF in esecuzione nell'area Internet dispone di autorizzazioni di esecuzione ridotte.This means that WPFWPF content running in the internet zone has reduced execution permissions. In questa area Internet vengono in genere eseguiti il codice "XAML separato", ovvero pagine di XAML non compilato interpretato in fase di caricamento da parte di un visualizzatore XAML, e l'applicazione browser XAML (XBAP)XAML browser application (XBAP), che usano lo stesso set di autorizzazioni."Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and applicazione browser XAML (XBAP)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. Il codice XAML caricato in un'applicazione completamente attendibile, tuttavia, dispone dello stesso accesso alle risorse di sistema dell'applicazione host.However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. Per altre informazioni, vedere Sicurezza con attendibilità parziale in WPF.For more information, see WPF Partial Trust Security.

Le implicazioni di queste istruzioni XamlReader per sono che la progettazione dell'applicazione deve prendere decisioni di attendibilità sul codice XAML che si decide di caricare.The implications of these statements for XamlReader is that your application design must make trust decisions about the XAML you decide to load. Se si sta caricando codice XAML non attendibile, è consigliabile implementare una tecnica di sandbox personalizzata per il caricamento dell'oggetto grafico risultante.If you are loading XAML that is not trusted, consider implementing your own sandboxing technique for how you load the resulting object graph.

XamlReaderpuò anche essere chiamato da codice parzialmente attendibile.XamlReader can also be called by partial trust code. In questo caso, viene applicata l'area di sicurezza Internet per la sicurezza dall'accesso di codice.In this case, Internet security zone is applied for code access security. Se qualsiasi elemento nel codice XAML caricato non è valido in un'area di sicurezza Internet, viene generata un'eccezione di analisi XAML.If anything in the loaded XAML is invalid under Internet security zone, a XAML parse exception is thrown. In XBAP e in altri casi con attendibilità parziale a livello di piattaforma, XamlReader dove fa parte dell'esecuzione, si ottiene lo stesso comportamento di eccezione delle chiamate con attendibilità parziale esplicite.Under XBAP and other cases that are partial trust at the platform level, where XamlReader is part of the execution, you get the same exception behavior as with explicit partial trust calls.

XAML WPF, reader/writer XAML e controllo delle versioni del linguaggio XAMLWPF XAML, XAML Readers/Writers, and XAML Language Versioning

XAML2009 include funzionalità del linguaggio quali x:Reference e x:FactoryMethod.XAML2009 includes language features such as x:Reference and x:FactoryMethod. È possibile utilizzare le firme Load di Parse o per caricare XAML che utilizza queste funzionalità.You can use signatures of Load or Parse to load XAML that uses these features. Tuttavia, queste funzionalità del linguaggio non sono supportate per XAML che devono essere compilate con markup (ad esempio XAML per l'azione di compilazione della pagina in un'applicazione WPF o qualsiasi codice XAML che includa l'attività di compilazione del markup nelle azioni di compilazione).However, those language features are not supported for XAML that needs to be markup compiled (such as XAML for the Page build action in a WPF application, or any XAML that involves the markup compile task in the build actions).

I tipi WPF e la tecnologia WPF in generale supportano concetti basati sull'accesso a elementi interni WPF.WPF types and the WPF technology in general support concepts that rely on access to WPF internals. Ad esempio, il modo in cui WPF implementa le proprietà di dipendenza si basa su tecniche interne per una ricerca efficiente del membro del tipo.For instance, how WPF implements dependency properties relies on internal techniques for efficient type-member lookup. L'accesso a questi elementi interni è abilitato dalle API di lettura e scrittura XAML fornite XamlWriter in XamlReader e dallo System.Windows.Markup spazio dei nomi e dall'assembly PresentationFramework.Access to these internals is enabled by the XAML reading and writing APIs provided in XamlWriter and XamlReader from the System.Windows.Markup namespace and PresentationFramework assembly. Tuttavia, i reader XAML e i writer XAML di livello inferiore dall'assembly System. XAML (classi basate su System.Xaml.XamlReader, System.Xaml.XamlWriter) non hanno accesso agli elementi interni WPF.However, the lower-level XAML readers and XAML writers from the System.Xaml assembly (classes based on System.Xaml.XamlReader, System.Xaml.XamlWriter) do not have access to the WPF internals. Non esiste alcuna dipendenza da System. XAML a qualsiasi assembly specifico di WPF.There is no dependency from System.Xaml to any WPF-specific assembly. Senza l'accesso agli elementi interni WPF, i reader e i writer System. XAML non possono caricare o salvare correttamente tutti i tipi WPF o i tipi basati sui tipi WPF.Without access to the WPF internals, System.Xaml readers and writers cannot correctly load or save all WPF types, or types based on WPF types. In particolare, i reader e i writer System. XAML non comprendono concetti quali la proprietà di dipendenza WPF che supporta l'archivio delle proprietà o tutte le specifiche di come WPF usa gli stili, i dizionari risorse e i modelli.In particular, the System.Xaml readers and writers do not understand concepts such as the WPF dependency property backing property store, or all the specifics of how WPF uses styles, resource dictionaries and templates. È quindi possibile scegliere di effettuare le operazioni seguenti:Therefore you have a choice to make:

  • Se si caricano tipi WPF e/o si usa XAML in un modulo BAML in qualsiasi modo, usare i reader XAML e i writer XAML di PresentationFramework.If you are loading WPF types, and/or you are using XAML in BAML form in any way, use the PresentationFramework XAML readers and XAML writers.

  • Se non si utilizza alcun tipo WPF o il modulo BAML di XAML e non si utilizza un'implementazione di reader XAML o writer XAML di un'altra tecnologia specifica per i motivi specifici di tale Framework, utilizzare i reader XAML e i writer XAML di System. XAML.If you are not relying on any WPF types or the BAML form of XAML, and are not using another specific technology's XAML reader or XAML writer implementation for reasons that are specific to that framework, use the System.Xaml XAML readers and XAML writers.

Implementazione del supporto System. XAML in .NET 4System.Xaml Backing Implementation in .NET 4

XamlReaderè la superficie dell'API richiamabile per il parser XAML a livello di Framework WPF.XamlReader is the callable API surface for the WPF framework-level XAML parser. Lo stesso parser XAML sottostante esegue anche il caricamento e l'analisi XAML in fase di esecuzione per le applicazioni WPF .NET Framework 3.0.NET Framework 3.0 destinate a e .NET Framework 3.5.NET Framework 3.5.The same underlying XAML parser also performs the run-time XAML loading and parsing for WPF applications that target .NET Framework 3.0.NET Framework 3.0 and .NET Framework 3.5.NET Framework 3.5.

Se la destinazione .NET Framework 4.NET Framework 4è, l'API esterna è la stessa, ma parti dell'implementazione sono basate .NET Framework 4.NET Framework 4 sull'implementazione XAML generale nell'assembly System. XAML, che consente di migliorare molti degli aspetti tecnici e di Reporting dell'analisi di XAML.If you are targeting .NET Framework 4.NET Framework 4, the external API is the same, but parts of the implementation are built on the .NET Framework 4.NET Framework 4 general XAML implementation in the System.Xaml assembly, which improves many of the technical and reporting aspects of parsing XAML. Il targeting 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. .NET Framework 4.NET Framework 4Targeting .NET Framework 4.NET Framework 4 necessarily entails including System.Xaml as a reference, and details of implementation such as the exceptions reported may come from System.Xaml defined types.

Costruttori

XamlReader()

Inizializza una nuova istanza della classe XamlReader.Initializes a new instance of the XamlReader class.

Metodi

CancelAsync()

Interrompe l'operazione di caricamento asincrona corrente, se ne è presente una in sospeso.Aborts the current asynchronous load operation, if there is an asynchronous load operation pending.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
GetWpfSchemaContext()

Restituisce un oggetto XamlSchemaContext che rappresenta le impostazioni del contesto dello schema WPF per un XamlReader.Returns a XamlSchemaContext object that represents the WPF schema context settings for a 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.Reads the XAML input in the specified Stream and returns an Object that is the root of the corresponding object tree.

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.Reads the XAML input in the specified Stream and returns an object that is the root of the corresponding object tree.

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.Reads the XAML input through a provided XamlReader and returns an object that is the root of the corresponding object tree.

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.Reads the XAML input in the specified XmlReader and returns an object that is the root of the corresponding object tree.

LoadAsync(Stream)

Legge l'input XAML nell'oggetto Stream specificato e restituisce la radice della struttura ad albero di oggetti corrispondente.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, ParserContext)

Legge l'input XAML nell'oggetto Stream specificato e restituisce la radice della struttura ad albero di oggetti corrispondente.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(XmlReader)

Legge l'input XAML nell'oggetto XmlReader specificato e restituisce la radice della struttura ad albero di oggetti corrispondente.Reads the XAML input in the specified XmlReader and returns the root of the corresponding object tree.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
Parse(String)

Legge l'input XAML nella stringa di testo specificata e restituisce un oggetto corrispondente alla radice del markup specificato.Reads the XAML input in the specified text string and returns an object that corresponds to the root of the specified markup.

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.Reads the XAML markup in the specified text string (using a specified ParserContext) and returns an object that corresponds to the root of the specified markup.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Eventi

LoadCompleted

Si verifica al completamento di un'operazione di caricamento asincrona.Occurs when an asynchronous load operation completes.

Si applica a

Vedi anche