Condividi tramite


XamlReader Classe

Definizione

Fornisce un motore di processore XAML per l'analisi di XAML e la creazione di alberi degli oggetti corrispondenti.

public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
Ereditarietà
Object Platform::Object IInspectable XamlReader
Attributi

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)

Esempio

Questo esempio crea un singolo oggetto Ellipse da una stringa XAML, chiamando Load. Quindi connette l'oggetto Ellipse creato ma disconnesso alla raccolta Children di un elemento già esistente nell'app UWP in esecuzione. Infine, l'esempio accede di nuovo all'ellisse nel percorso in cui è stato aggiunto usando una query e ne modifica una delle proprietà.

string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\" 
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
  where (item is FrameworkElement) 
  && ((FrameworkElement) item).Name == "EllipseAdded"
  select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);

Commenti

XamlReader è una classe di utilità con metodi che creano oggetti in base a un input di markup XAML in formato stringa. XamlReader fornisce un comportamento di costruzione di oggetti che paralleli la modalità di analisi di XAML da parte del parser XAML Windows Runtime e l'uso di XAML per definire l'interfaccia utente di un'app UWP.

L'analisi dell'input XAML con XamlReader.Load genera alberi degli oggetti di runtime di oggetti Windows Runtime. L'albero degli oggetti fornisce un modo per programmare in base a tali oggetti in fase di esecuzione, passando attraverso parti dell'albero completo.

Esistono diversi concetti importanti da comprendere quando si creano oggetti da XAML con il metodo XamlReader.Load :

  • La stringa di contenuto XAML deve definire un singolo elemento radice.
  • La stringa di contenuto XAML deve essere XML ben formata, oltre a essere XAML valido.
  • Il contenuto XAML deve definire un xmlns predefinito. In genere si tratta del vocabolario XAML Windows Runtime, come identificato da http://schemas.microsoft.com/winfx/2006/xaml/presentation.
  • Tutti gli assembly personalizzati a cui viene fatto riferimento in un mapping dello spazio dei nomi XAML devono essere già disponibili per l'applicazione.
  • Xaml non deve tentare di specificare l'attributo x:Class o includere attributi definiti da XAML per i gestori eventi.
  • Non puoi usare FindName nell'ambito dei nomi XAML generale per trovare un oggetto di runtime aggiunto, ma puoi eseguire ricerche nell'ambito dei nomi XAML specifico dell'oggetto creato. Per altre info, vedi Ambiti dei nomi XAML.
  • La logica di creazione di oggetti non può integrare il codice XAML caricato con classi code-behind in fase di esecuzione. Se si desidera aggiungere gestori eventi, è necessario farlo nel codice facendo riferimento agli oggetti ottenuti dall'interno della struttura ad albero di oggetti del risultato load e usando la sintassi specifica del linguaggio per il collegamento di gestori (ad esempio +=).
  • Deve essere presente contenuto XAML; non è possibile sostituire l'intero albero del contenuto. Devi mantenere almeno l'elemento radice originale in modo che le implicazioni del modello dell'app di una pagina XAML caricata rimangano attive.
  • L'oggetto creato da Load può essere assegnato a una sola posizione nell'albero degli oggetti primario. Se vuoi aggiungere oggetti creati da XAML identico a aree diverse dell'albero degli oggetti primario dell'applicazione, devi analizzare il codice XAML più volte usando la stessa stringa di input, usando destinazioni diverse per il valore restituito.
  • L'albero degli oggetti primario rimanente deve supportare una proprietà appropriata da impostare.

Metodi

Load(String)

Analizza un frammento XAML ben formato e crea un albero di oggetti corrispondente e restituisce la radice dell'albero degli oggetti.

LoadWithInitialTemplateValidation(String)

Analizza un frammento XAML ben formato crea un albero di oggetti corrispondente e restituisce la radice dell'albero degli oggetti. Esegue anche la convalida in fase di caricamento di qualsiasi modello collegato.

Si applica a

Vedi anche