Condividi tramite


Limitazioni relative alla serializzazione di XamlWriter.Save

È possibile utilizzare API Save per serializzare il contenuto di un'applicazione Windows Presentation Foundation (WPF) come file Extensible Application Markup Language (XAML). Esistono tuttavia delle limitazioni considerevoli relative alla definizione precisa dell'oggetto della serializzazione. Tali limitazioni e alcune considerazioni generali vengono esaminate in questo argomento.

Nel presente argomento sono contenute le seguenti sezioni.

  • Rappresentazione della fase di esecuzione e delle fasi esterne alla progettazione
  • La serializzazione è indipendente da riferimenti esterni
  • I riferimenti alle estensioni vengono risolti
  • La gestione degli eventi non viene mantenuta
  • Scenari realistici per l'utilizzo di XAMLWriter.Save

Rappresentazione della fase di esecuzione e delle fasi esterne alla progettazione

La scelta degli elementi da serializzare tramite una chiamata a Save deve basarsi sul fatto che il risultato sarà una rappresentazione dell'oggetto della serializzazione in fase di esecuzione. È possibile che molte proprietà della fase di progettazione del file XAML originale siano già state ottimizzate oppure perse al momento del caricamento di dati XAML come oggetti in memoria e non vengano mantenute nella chiamata a Save per la serializzazione. Il risultato della serializzazione consiste in una rappresentazione effettiva dell'albero logico dell'applicazione costruito, ma non necessariamente del file XAML che lo ha prodotto. Tale condizione rende estremamente difficile l'utilizzo della serializzazione Save come parte di un'area di progettazione XAML estensiva.

La serializzazione è indipendente da riferimenti esterni

L'output di serializzazione di Save è indipendente; tutti gli elementi serializzati sono contenuti in una singola pagina XAML, con un unico elemento radice e nessun riferimento esterno ad eccezione degli URIs. Ad esempio, se in una pagina vengono fatti riferimenti alle risorse dalle risorse dell'applicazione, questi saranno visualizzati come componenti della pagina serializzata.

I riferimenti alle estensioni vengono risolti

I riferimenti comuni agli oggetti costituiti da diversi formati di estensione di markup, ad esempio StaticResource o Binding, saranno risolti durante il processo di serializzazione. La risoluzione avviene già al momento della creazione degli oggetti in memoria durante la fase di esecuzione dell'applicazione e la logica di Save non prevede la revisione dei dati XAML originali per il ripristino di tali riferimenti nell'output della serializzazione. In questo modo, potenzialmente qualsiasi valore associato ai dati o proveniente dalla risorsa viene bloccato come ultimo valore utilizzato dalla rappresentazione in fase di esecuzione, con possibilità solo limitate o indirette di distinguerlo da qualsiasi altro valore impostato localmente. Anche le immagini vengono serializzate come riferimenti a oggetti in base alle immagini esistenti nel progetto, piuttosto che come riferimenti all'origine effettiva, con conseguente perdita di qualsiasi nome file o URI a cui si faceva originariamente riferimento. Perfino le risorse dichiarate all'interno della stessa pagina sono serializzate nel punto in cui vengono fatti i relativi riferimenti, anziché essere conservate come chiave dell'insieme delle risorse.

La gestione degli eventi non viene mantenuta

Quando i gestori di evento aggiunti tramite XAML sono serializzati, non vengono mantenuti. XAML senza code-behind (e senza il relativo meccanismo x:Code) non consente di serializzare la logica procedurale runtime. Dal momento che la serializzazione è indipendente e limitata all'albero logico, non sono disponibili funzionalità per l'archiviazione dei gestori eventi. Di conseguenza, gli attributi dei gestori eventi, sia l'attributo stesso che il valore della stringa indicante il nome del gestore, vengono rimossi dall'output XAML.

Scenari realistici per l'utilizzo di XAMLWriter.Save

Sebbene le limitazioni qui elencate siano piuttosto rilevanti, esistono diversi scenari appropriati per l'utilizzo di Save per la serializzazione.

  • Output vettoriale o grafico: l'output dell'area sottoposta a rendering può essere utilizzato per riprodurre lo stesso vettore o la stessa grafica se caricato nuovamente.

  • Documenti RTF o dinamici: il testo con tutta la formattazione e il contenimento degli elementi inclusi viene mantenuto nell'output. Tale opzione può risultare utile per i meccanismi che si avvicinano a una funzionalità degli Appunti.

  • Conservazione dei dati di oggetti business: se in elementi personalizzati sono stati archiviati dei dati, quali i dati XML, finché gli oggetti business seguono le regole XAML di base, ad esempio fornire costruttori personalizzati e la conversione per valori di proprietà per riferimento, sarà possibile conservare tali oggetti business mediante la serializzazione.