La forma sincrona Load i metodi sono statici, ma gli asincroni LoadAsync i metodi non sono statici e non richiedono un'istanza di XamlReader classe da utilizzare.
L'output di Load i metodi di un singolo oggetto, che rappresenta l'oggetto radice di una struttura ad albero di oggetti o di un oggetto grafico creato. Oggetti grafici creati da XamlReader in genere vengono aggiunti all'albero a oggetti esistente di un'applicazione WPF in fase di esecuzione. In caso contrario il nuovo oggetto grafico viene considerato disconnesso allo scopo del modello di applicazione WPF. Ciò significa che non esegue il rendering e non può essere eseguito utilizzando una delle tecniche della struttura ad albero di oggetti per la struttura ad albero di oggetti principale dell'applicazione WPF, ad esempio le API FindName, LogicalTreeHelper, VisualTreeHelper). Per ulteriori informazioni sui concetti di struttura ad albero di oggetti, vedere Strutture ad albero in WPF.
XamlReader
supporta i seguenti scenari principali:
Factory oggetto o duplicare: Senza meccanismi aggiuntivi, un tipo di riferimento non può essere incluso in genere in più posizioni in una struttura ad albero di oggetti WPF. (Esempi dei meccanismi aggiuntivi che offrono supporto per condividere o il riutilizzo in WPF sono gli oggetti basati su Freezable, o il supporto per gli oggetti comunemente condivisibili come Brush ciò è fatto riferimento come elemento da un oggetto ResourceDictionary). Un modo per duplicare un oggetto già presente nella struttura ad albero di oggetti è di serializzare l'oggetto utilizzando XamlWriter.Save. Utilizzare quindi la stringa serializzata come input per una chiamata a Load, con un flusso o XmlReader intermediaria.
Generando oggetti basati sulle informazioni JIT: Vi sono spesso altri modi di disporre di associazione tardiva o la modifica fornita dall'utente di input lo stato di esistenza oggetti. È possibile ad esempio utilizzare lo stesso valore per impostare più proprietà, o utilizzare l'associazione dati. Ma se è uno scenario in cui anche il tipo di oggetto creare solo determinabile in fase di esecuzione o con un'interazione, quindi creando un oggetto compilando una stringa per Load l'input viene spesso una tecnica utile.
Utilizzando le tecniche esistenti delle risorse: Stream il tipo viene utilizzato spesso in altri framework o tecnologie per i dati oppure oggetti di trasferimento oltre i limiti di applicazione o per le situazioni simili. È quindi possibile utilizzare Stream le tecniche da archiviare o per XAML-hanno formattato i dati che verrà utilizzato per creare un oggetto come parte dell'applicazione.
Documenti statici: L'applicazione potrebbe caricare il locale o i documenti scaricati XPS per l'inclusione in una struttura ad albero e nell'interfaccia utente dell'applicazione WPF.
Nota |
|---|
Questa documentazione talvolta viene descritto un oggetto grafico, in contrapposizione a una struttura ad albero di oggetti. Una relazione rigida padre-figlio non esiste sempre le relazioni tra oggetti runtime di un'applicazione di runtime WPF, pertanto un oggetto grafico è più largamente una terminologia applicabile. Tuttavia, poiché WPF include inoltre la concettualizzazione diverso le API della struttura ad albero due (LogicalTreeHelper, VisualTreeHelper) la metafora di struttura ad albero è applicato in modo adeguato alla maggior parte dei casi realistici in WPF. Dalla prospettiva del linguaggio XAML tuttavia, l'oggetto grafico rappresenta spesso la migliore per considerare il modo in cui gli oggetti vengono creati da XAML, poiché il linguaggio stesso XAML non necessariamente specifica le metodologie della classe di supporto che introdotti le relazioni in una struttura ad albero di nuovo. |
Sicurezza per l'accesso al codice, XAML separato e XamlReader
XAML è un linguaggio di markup che rappresenta direttamente la creazione di istanze e l'esecuzione dell'oggetto. Di conseguenza, gli elementi creati in XAML hanno la stessa capacità di interagire con le risorse di sistema (accesso alla rete, e IO file system, ad esempio) del codice generato equivalente.
WPF supporta .NET framework di sicurezza Sicurezza per l'accesso al codice (CAS, Code Access Security). Ciò significa WPF il funzionamento di contenuto dell'area Internet dispone di autorizzazioni di esecuzione. “ XAML separato„ (pagine XAML a interpretate in fase di caricamento da un visualizzatore XAML) e applicazione browser XAML (XBAP) in genere vengono eseguiti in questa area Internet e utilizzano lo stesso set di autorizzazioni. Tuttavia, il codice XAML caricato in un'applicazione completamente attendibile ha lo stesso accesso alle risorse di sistema dell'applicazione host. Per ulteriori informazioni, vedere Sicurezza con attendibilità parziale in WPF.
Le implicazioni di queste istruzioni per XamlReader è quello che il progetto dell'applicazione deve prendere decisioni sull'attendibilità di XAML si decide di caricare. Se si sta caricando XAML non attendibile, considerare l'implementazione di della tecnica di sandboxing per come caricare l'oggetto grafico risultante.
XamlReader
può essere chiamato da codice parzialmente attendibile. In questo caso, l'area Internet security si applica alla sicurezza per l'accesso di codice. Se si è in XAML caricato non è valido nell'area Internet security, viene generata un'eccezione di analisi XAML viene generata un'eccezione. In applicazioni XBAP e di altri casi che sono parzialmente attendibili a livello piattaforma, dove XamlReader fa parte dell'esecuzione, si ottiene lo stesso comportamento delle eccezioni con chiamate parzialmente attendibili esplicite.
XAML WPF, reader XAML o writer e controllo delle versioni del linguaggio XAML
XAML2009 include funzionalità del linguaggio come x: riferimento e x: FactoryMethod. È possibile utilizzare le firme di Load o Parse per caricare XAML che utilizza queste funzionalità. Tuttavia, le funzionalità del linguaggio non sono supportate per XAML che deve essere markup compilato (come XAML per pagina l'operazione di compilazione in un'applicazione WPF, o tutto il codice che include il markup compila l'attività nelle operazioni di compilazione).
Tipi WPF e la tecnologia WPF nei concetti generali di supporto che si basano sull'accesso ai internals WPF. Ad esempio, ad esempio le proprietà di dipendenza di implementazione WPF si basa sulle tecniche interne di ricerca efficiente del membro del tipo. Per accedere a questi internals è attivato dalla lettura di XAML e dalla scrittura API disponibili in XamlWriter e XamlReader da System.Windows.Markup spazio dei nomi e assembly PresentationFramework. Tuttavia, i reader XAML di livello inferiore e writer XAML dall'assembly System.Xaml (classi basate su System.Xaml.XamlReader, System.Xaml.XamlWriter) non avere accesso a internals WPF. Non esiste alcuna dipendenza da System.Xaml a qualsiasi assembly WPF-specifico. Senza accesso ai internals WPF, reader e writer di System.Xaml non possono correttamente caricare o salvare tutti i tipi WPF, o i tipi basati sui tipi WPF. In particolare, i reader di System.Xaml e writer non siano concetti quali la proprietà di dipendenza WPF che supporta archiviare la proprietà, o tutte le specifiche di WPF vengono utilizzati gli stili, nei dizionari risorse e modelli. Di conseguenza è possibile scegliere da fare:
Se si sta caricando i tipi WPF e/o si utilizza XAML nel form BAML in alcun modo, utilizzare i reader XAML PresentationFramework e writer XAML.
Se non si basa su alcuni tipi WPF o nel form BALM di XAML e non si utilizza il reader XAML specifico o l'implementazione del writer XAML di un'altra tecnologia per i motivi specifico del framework, utilizzare i reader XAML di System.Xaml e writer XAML.
Implementazione dell'assembly System.Xaml in .NET 4
XamlReader
rappresenta la superficie chiamabile di API per il parser livello di Framework WPF XAML. Lo stesso parser sottostante XAML esegue anche il caricamento e la tracciatura di runtime XAML per le applicazioni WPF che riguardano .NET Framework 3.0 e .NET Framework 3.5.
Se si intende utilizzare .NET Framework 4, le API esterne è lo stesso, ma le parti dell'implementazione vengono compilate in .NET Framework 4 implementazione XAML generale nell'assembly System.Xaml, che migliora molti degli aspetti di segnalazione e tecnici di analisi XAML. Il routing .NET Framework 4 comporta necessariamente inclusi System.Xaml come riferimento e i dettagli dell'implementazione come le eccezioni riportate possono derivare da tipi definiti nell'assembly System.Xaml.