Condividi tramite


Documenti in WPF

Windows Presentation Foundation (WPF) offre un'ampia gamma di funzionalità di documento che consentono la creazione di contenuti ad alta fedeltà progettati per essere accessibili e letti più facilmente rispetto alle generazioni precedenti di Windows. Oltre a funzionalità avanzate e qualità, WPF offre anche servizi integrati per la visualizzazione, la creazione di pacchetti e la sicurezza dei documenti. In questo argomento viene fornita un'introduzione ai tipi di documenti WPF e alla creazione di pacchetti di documenti.

Tipi di documenti

WPF divide i documenti in due categorie generali in base all'uso previsto; queste categorie di documenti sono dette "documenti fissi" e "documenti di flusso".

I documenti fissi sono destinati a applicazioni che richiedono una presentazione precisa (WYSIWYG), indipendentemente dall'hardware degli schermi o delle stampanti usati. Gli usi tipici per i documenti fissi includono il desktop publishing, la videoscrittura e la progettazione dei moduli, in cui la conformità al design della pagina originale è fondamentale. Come parte del layout, un documento fisso mantiene la posizione precisa degli elementi di contenuto indipendentemente dallo schermo o dal dispositivo di stampa in uso. Ad esempio, una pagina di documento fissa visualizzata su uno schermo a 96 dpi apparirà esattamente lo stesso sia quando viene inviata a una stampante laser a 600 dpi, sia quando viene inviata a una fotocompositrice a 4800 dpi. Il layout di pagina rimane invariato in tutti i casi, mentre la qualità del documento ottimizza le funzionalità di ogni dispositivo.

Per confronto, i documenti di flusso sono progettati per ottimizzare la visualizzazione e la leggibilità e vengono usati al meglio quando la facilità di lettura è lo scenario principale di utilizzo dei documenti. Invece di essere impostati su un layout predefinito, i documenti di flusso si adattano dinamicamente e ridistribuiscono il loro contenuto in base a variabili di runtime, come le dimensioni della finestra, la risoluzione del dispositivo e le preferenze utente facoltative. Una pagina Web è un semplice esempio di documento di flusso in cui il contenuto della pagina viene formattato in modo dinamico per adattarsi alla finestra corrente. I documenti di flusso ottimizzano l'esperienza di visualizzazione e lettura per l'utente, in base all'ambiente di runtime. Ad esempio, lo stesso documento di flusso si riformatta in modo dinamico per una leggibilità ottimale su un display da 19 pollici ad alta risoluzione o su un piccolo schermo PDA da 2x3 pollici. Inoltre, i documenti di flusso hanno una serie di funzionalità predefinite, tra cui la ricerca, le modalità di visualizzazione che ottimizzano la leggibilità e la possibilità di modificare le dimensioni e l'aspetto dei tipi di carattere. Per illustrazioni, esempi e informazioni dettagliate sui documenti di flusso, vedere panoramica dei documenti di flusso.

Controlli del documento e layout del testo

.NET Framework offre un set di controlli predefiniti che semplificano l'uso di documenti fissi, documenti di flusso e testo generale all'interno dell'applicazione. La visualizzazione del contenuto fisso del documento è supportata tramite il controllo DocumentViewer. La visualizzazione del contenuto del documento di flusso è supportata da tre diversi controlli: FlowDocumentReader, FlowDocumentPageViewere FlowDocumentScrollViewer che eseguono il mapping a diversi scenari utente (vedere le sezioni seguenti). Altri controlli WPF offrono un layout semplificato per supportare gli usi generali del testo (vedere testo nell'interfaccia utentedi seguito).

Controllo fisso dei documenti - DocumentViewer

Il controllo DocumentViewer è progettato per visualizzare il contenuto FixedDocument. Il controllo DocumentViewer fornisce un'interfaccia utente intuitiva che offre supporto predefinito per operazioni comuni, tra cui l'output di stampa, la copia negli appunti, lo zoom e le funzionalità di ricerca di testo. Il controllo consente l'accesso alle pagine di contenuto tramite un meccanismo di scorrimento familiare. Come tutti i controlli WPF, DocumentViewer supporta il restyling completo o parziale, che consente di integrare visivamente il controllo in qualsiasi applicazione o ambiente.

DocumentViewer è progettato per visualizzare il contenuto in modalità sola lettura; la modifica del contenuto non è disponibile e non è supportata.

Controlli di documenti di flusso

Nota

Per informazioni più dettagliate sulle funzionalità dei documenti di flusso e su come crearle, vedere panoramica del documento di flusso .

La visualizzazione del contenuto del documento di flusso è supportata da tre controlli: FlowDocumentReader, FlowDocumentPageViewere FlowDocumentScrollViewer.

FlowDocumentReader

FlowDocumentReader include funzionalità che consentono all'utente di scegliere dinamicamente tra diverse modalità di visualizzazione, tra cui una modalità di visualizzazione a pagina singola (pagina alla volta), una modalità di visualizzazione a due pagine alla volta (formato di lettura libro) e una modalità di visualizzazione continua di scorrimento (senza fondo). Per altre informazioni su queste modalità di visualizzazione, vedere FlowDocumentReaderViewingMode. Se non è necessaria la possibilità di passare dinamicamente tra diverse modalità di visualizzazione, FlowDocumentPageViewer e FlowDocumentScrollViewer forniscono visualizzatori di contenuto a flusso che sono più leggeri e fissi in una modalità di visualizzazione particolare.

FlowDocumentPageViewer e FlowDocumentScrollViewer

FlowDocumentPageViewer mostra il contenuto in modalità di visualizzazione di pagina alla volta, mentre FlowDocumentScrollViewer mostra il contenuto in modalità di scorrimento continuo. Sia FlowDocumentPageViewer che FlowDocumentScrollViewer sono fissi in una particolare modalità di visualizzazione. Confronta con FlowDocumentReader, che include funzionalità che consentono all'utente di scegliere in modo dinamico tra varie modalità di visualizzazione (come fornito dall'enumerazione FlowDocumentReaderViewingMode), pur essendo più oneroso in termini di risorse rispetto a FlowDocumentPageViewer o FlowDocumentScrollViewer.

Per impostazione predefinita, viene sempre visualizzata una barra di scorrimento verticale e, se necessario, una barra di scorrimento orizzontale diventa visibile. L'interfaccia utente predefinita per FlowDocumentScrollViewer non include una barra degli strumenti; Tuttavia, la proprietà IsToolBarVisible può essere usata per abilitare una barra degli strumenti predefinita.

Testo nell'interfaccia utente

Oltre ad aggiungere testo ai documenti, il testo può ovviamente essere usato nell'interfaccia utente dell'applicazione, ad esempio moduli. WPF include più controlli per disegnare testo sullo schermo. Ogni controllo è destinato a uno scenario diverso e ha un proprio elenco di funzionalità e limitazioni. In generale, l'elemento TextBlock deve essere usato quando è necessario un supporto di testo limitato, ad esempio una breve frase in un'interfaccia utente. Label può essere usato quando è necessario un supporto di testo minimo. Per ulteriori informazioni, vedere Panoramica di TextBlock.

Creazione di pacchetti di documenti

Le API System.IO.Packaging offrono un mezzo efficiente per organizzare i dati dell'applicazione, il contenuto del documento e le risorse correlate in un singolo contenitore semplice da accedere, portabile e facile da distribuire. Un file ZIP è un esempio di un tipo Package in grado di contenere più oggetti come singola unità. Le API di creazione pacchetti forniscono un'implementazione predefinita ZipPackage progettata usando uno standard Open Packaging Conventions con architettura di file XML e ZIP. Le API di creazione di pacchetti WPF semplificano la creazione di pacchetti e l'archiviazione e l'accesso agli oggetti all'interno di essi. Un oggetto archiviato in un Package viene definito PackagePart ("parte"). I pacchetti possono includere anche certificati digitali firmati che possono essere usati per identificare l'originatore di una parte e per verificare che il contenuto di un pacchetto non sia stato modificato. I pacchetti includono anche una funzionalità di PackageRelationship che consente di aggiungere informazioni aggiuntive a un pacchetto o associate a parti specifiche senza modificare effettivamente il contenuto delle parti esistenti. I servizi pacchetto supportano anche Microsoft Windows Rights Management (RM).

L'architettura del pacchetto WPF funge da base per diverse tecnologie chiave:

  • Documenti XPS conformi alla specifica XML Paper Specification (XPS).

  • Documenti in formato XML aperto di Microsoft Office "12" (.docx).

  • Formati di archiviazione personalizzati per la progettazione di applicazioni personalizzate.

In base alle API di creazione di pacchetti, un XpsDocument è progettato specificamente per l'archiviazione di documenti di contenuto fisso WPF. Un XpsDocument è un documento autonomo che può essere aperto in un visualizzatore, visualizzato in un controllo DocumentViewer, indirizzato a uno spool di stampa o inviato direttamente a una stampante compatibile con XPS.

Le sezioni seguenti forniscono informazioni aggiuntive sulle API Package e XpsDocument fornite con WPF.

Componenti del pacchetto

Le API di creazione di pacchetti WPF consentono di organizzare i dati e i documenti dell'applicazione in una singola unità portabile. Un file ZIP è uno dei tipi di pacchetti più comuni ed è il tipo di pacchetto predefinito fornito con WPF. Package stessa è una classe astratta da cui ZipPackage viene implementata usando un'architettura di file XML e ZIP standard aperta. Il metodo Open usa ZipPackage per creare e usare i file ZIP per impostazione predefinita. Un pacchetto può contenere tre tipi di elementi di base:

Articolo Descrizione
PackagePart Contenuto dell'applicazione, dati, documenti e file di risorse.
PackageDigitalSignature [Certificato X.509] per l'identificazione, l'autenticazione e la convalida.
PackageRelationship Informazioni aggiunte correlate al pacchetto o a una parte specifica.

Parti del Pacchetto

Un PackagePart ("parte") è una classe astratta che fa riferimento a un oggetto archiviato in un Package. In un file ZIP le parti del pacchetto corrispondono ai singoli file archiviati all'interno del file ZIP. ZipPackagePart fornisce l'implementazione predefinita per gli oggetti serializzabili archiviati in un ZipPackage. Analogamente a un sistema di file, le parti contenute nel pacchetto vengono archiviate in una struttura gerarchica a cartelle. Usando le API di creazione di pacchetti WPF, le applicazioni possono scrivere, archiviare e leggere più oggetti PackagePart usando un singolo contenitore di file ZIP.

PackageDigitalSignatures

Per motivi di sicurezza, un PackageDigitalSignature ("firma digitale") può essere associato a parti all'interno di un pacchetto. Un PackageDigitalSignature incorpora un [509] che fornisce due funzionalità:

  1. Identifica e autentica l'originatore della parte.

  2. Verifica che la parte non sia stata modificata.

La firma digitale non impedisce la modifica di una parte, ma un controllo di convalida sulla firma digitale avrà esito negativo se la parte viene modificata in alcun modo. L'applicazione può quindi eseguire un'azione appropriata, ad esempio bloccare l'apertura della parte o notificare all'utente che la parte è stata modificata e non è sicura.

Relazioni del Pacchetto

Un PackageRelationship ("relazione") fornisce un meccanismo per associare informazioni aggiuntive al pacchetto o a una delle sue parti. Una relazione è una funzionalità a livello di pacchetto che può associare informazioni aggiuntive a una parte senza modificare il contenuto effettivo della parte. L'inserimento di nuovi dati direttamente nel contenuto della parte non è in genere pratico in molti casi.

  • Il tipo effettivo della parte e il relativo schema di contenuto non sono noti.

  • Anche se noto, lo schema del contenuto potrebbe non fornire un mezzo per l'aggiunta di nuove informazioni.

  • La parte potrebbe essere firmata digitalmente o crittografata, impedendo qualsiasi modifica.

Le relazioni tra pacchetti offrono un mezzo individuabile per l'aggiunta e l'associazione di informazioni aggiuntive a singole parti o all'intero pacchetto. Le relazioni tra pacchetti vengono usate per due funzioni principali:

  1. Definizione delle relazioni di dipendenza da una parte a un'altra.

  2. Definizione di relazioni di informazioni che aggiungono note o altri dati correlati alla parte.

Un PackageRelationship fornisce un modo rapido e individuabile per definire le dipendenze e aggiungere altre informazioni associate a una parte del pacchetto o al pacchetto nel suo complesso.

Relazioni di dipendenza

Le relazioni di dipendenza vengono utilizzate per descrivere le dipendenze che una parte ha su altre parti. Ad esempio, un pacchetto può contenere una parte HTML che include uno o più tag immagine <img>. I tag di immagine fanno riferimento alle immagini che si trovano come altre parti interne al pacchetto o esterne al pacchetto ,ad esempio accessibili tramite Internet. La creazione di un PackageRelationship associato al file HTML semplifica l'individuazione e l'accesso alle risorse dipendenti. Un'applicazione browser o visualizzatore può accedere direttamente alle relazioni di parte e iniziare immediatamente ad assemblare le risorse dipendenti senza conoscere lo schema o analizzare il documento.

Relazioni informative

Analogamente a una nota o a un'annotazione, un PackageRelationship può essere usato anche per archiviare altri tipi di informazioni da associare a una parte senza dover effettivamente modificare il contenuto della parte stessa.

Documenti XPS

Il documento XPS (XML Paper Specification) è un pacchetto contenente uno o più documenti fissi insieme a tutte le risorse e le informazioni necessarie per il rendering. XPS è anche il formato file nativo per lo spooling di stampa di Windows Vista. Un XpsDocument viene archiviato nel set di dati ZIP standard e può includere una combinazione di componenti XML e binari, ad esempio file di immagine e tipi di carattere. PackageRelationships vengono usati per definire le dipendenze tra il contenuto e le risorse necessarie per rendere completamente il documento. La progettazione XpsDocument offre una singola soluzione di documento ad alta fedeltà che supporta più usi:

  • Lettura, scrittura e archiviazione di risorse e contenuto di documenti fissi come file singolo, portatile e facile da distribuire.

  • Visualizzazione di documenti con l'applicazione XPS Viewer.

  • L'output dei documenti nel formato nativo dello spooling di stampa di Windows Vista.

  • Instradare i documenti direttamente a una stampante compatibile con XPS.

Vedere anche