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 ad applicazioni che richiedono un preciso "quello che vedete è quello che si ottiene" (WYSIWYG) presentazione, indipendentemente dall'hardware dello schermo o della stampante usato. Tra gli usi tipici dei documenti statici rientrano le attività di desktop publishing, elaborazione di testi e layout di form, in cui la corrispondenza alla progettazione della pagina originale è essenziale. Come parte del layout, in un documento statico viene mantenuta la disposizione precisa degli elementi di contenuto indipendentemente dal dispositivo di visualizzazione o di stampa in uso. Ad esempio, la pagina di un documento statico visualizzata con un'impostazione di 96 dpi non varia quando viene stampata con una stampante laser a 600 dpi o con un fotocompositore a 4800 dpi. Il layout di pagina rimane invariato in ogni caso, benché la qualità del documento dipenda dalle capacità del dispositivo usato.

D'altro canto, i documenti dinamici sono progettati per ottimizzare la visualizzazione e la leggibilità e sono particolarmente adatti quando la facilità di lettura è il principale requisito d'uso per il documento. Anziché essere impostati su un layout predefinito, questi documenti consentono di adattare e ridisporre il contenuto in modo dinamico in base alle variabili in fase di esecuzione, ad esempio, le dimensioni della finestra, la risoluzione del dispositivo e le preferenze facoltative dell'utente. Una pagina Web è un esempio semplice di documento dinamico in cui il contenuto della pagina viene formattato dinamicamente per adattarsi alla finestra corrente. I documenti dinamici ottimizzano l'esperienza di visualizzazione e di lettura per l'utente, in base all'ambiente di runtime. Ad esempio, lo stesso documento dinamico verrà riformattato in modo dinamico per una leggibilità ottimale sia su dispositivi di visualizzazione da 19 pollici ad alta risoluzione che su piccoli schermi PDA da 2x3 pollici. Inoltre, i documenti dinamici dispongono di numerose funzionalità incorporate tra cui ricerca, modalità di visualizzazione che ottimizzano la leggibilità e possibilità di modificare le dimensioni e l'aspetto dei tipi di carattere. Vedere Cenni preliminari sui documenti dinamici per immagini, esempi e informazioni approfondite sui documenti dinamici.

Controlli dei documenti 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 del documento fisso è supportata tramite il DocumentViewer controllo . La visualizzazione del contenuto del documento di flusso è supportata da tre diversi controlli: FlowDocumentReader, FlowDocumentPageViewere che eseguono FlowDocumentScrollViewer 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 utente di seguito).

Controllo dei documenti statici: DocumentViewer

Il DocumentViewer controllo è progettato per visualizzare FixedDocument il contenuto. Il DocumentViewer controllo offre 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 di accedere a pagine di contenuto attraverso un meccanismo di scorrimento intuitivo. Analogamente a tutti i controlli WPF, DocumentViewer supporta il failover completo o parziale, che consente di integrare visivamente il controllo in praticamente in qualsiasi applicazione o ambiente.

DocumentViewer è progettato per visualizzare il contenuto in modo di sola lettura; la modifica o la modifica del contenuto non è disponibile e non è supportata.

Controlli dei documenti dinamici

Nota

Per informazioni più dettagliate sulle funzionalità dei documenti di flusso e su come crearle, vedere Cenni preliminari sui documenti di Flow.

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 varie 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 scorrimento continuo (senza fondo). Per altre informazioni su queste modalità di visualizzazione, vedere FlowDocumentReaderViewingMode. Se non è necessaria la possibilità di passare dinamicamente da una modalità FlowDocumentPageViewer di visualizzazione all'altra e FlowDocumentScrollViewer fornire visualizzatori di contenuto di flusso più leggeri fissi in una particolare modalità di visualizzazione.

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. Confrontare con FlowDocumentReader, che include funzionalità che consentono all'utente di scegliere in modo dinamico tra varie modalità di visualizzazione (come fornito dall'enumerazione FlowDocumentReaderViewingMode ), a costo di un utilizzo elevato di risorse rispetto FlowDocumentPageViewer a o FlowDocumentScrollViewer.

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

Testo nell'interfaccia utente

Oltre all'aggiunta di testo ai documenti, è ovviamente possibile usare il testo nell'interfaccia utente delle applicazioni, ad esempio nei form. WPF include più controlli per disegnare testo sullo schermo. Ogni controllo è destinato a uno scenario diverso e dispone di 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 altre informazioni, vedere Cenni preliminari sul controllo TextBlock.

Creazione di pacchetti di documenti

Le System.IO.Packaging API 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 Package tipo 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 oggetto viene definito " PackagePart parte". I pacchetti possono anche includere certificati digitali firmati utilizzabili per identificare l'autore di una parte e per confermare che il contenuto di un pacchetto non è stato modificato. I pacchetti includono anche una PackageRelationship funzionalità 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 DI CARTA XML (XPS).

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

  • Formati di archiviazione personalizzati per la progettazione delle applicazioni.

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

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

Componenti dei pacchetti

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 è una classe astratta da cui ZipPackage viene implementata usando un'architettura di file XML e ZIP standard aperta. Il Open metodo usa ZipPackage per creare e usare i file ZIP per impostazione predefinita. Un pacchetto può contenere tre tipi di elementi di base:

Elemento Descrizione
PackagePart Contenuto delle applicazioni, dati, documenti e file di risorse.
PackageDigitalSignature [Certificato x.509] per l'identificazione, l'autenticazione e la convalida.
PackageRelationship Informazioni aggiunte relative al pacchetto o a una parte specifica.

PackagePart

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

PackageDigitalSignature

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

  1. Identifica e autentica l'autore della parte.

  2. Conferma che la parte non è stata modificata.

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

PackageRelationship

Un PackageRelationship oggetto ("relazione") fornisce un meccanismo per l'associazione di informazioni aggiuntive al pacchetto o a una parte all'interno del pacchetto. Una relazione è una funzionalità a livello di pacchetto in grado di associare informazioni aggiuntive a una parte senza modificarne il contenuto effettivo. L'inserimento di nuovi dati direttamente nel contenuto in genere non è un'operazione pratica:

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

  • Anche se è noto, lo schema di contenuto potrebbe non offrire un metodo per l'aggiunta di nuove informazioni.

  • La parte potrebbe essere crittografata o firmata digitalmente, condizioni che impediscono qualsiasi modifica.

Le relazioni dei pacchetti offrono un metodo individuabile per aggiungere e associare altre informazioni a singole parti o all'intero pacchetto. Le relazioni dei pacchetti vengono usate per due funzioni principali:

  1. Definizione delle relazioni di dipendenza tra le parti.

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

Un PackageRelationship oggetto fornisce un mezzo 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 usate per descrivere le dipendenze tra le parti. Ad esempio, un pacchetto potrebbe contenere una parte HTML che include uno o più <tag di immagine img> . I tag immagine fanno riferimento a immagini posizionate come altre parti interne o esterne al pacchetto (ad esempio accessibili tramite Internet). La creazione di un PackageRelationship oggetto associato al file HTML semplifica l'individuazione e l'accesso alle risorse dipendenti. Un'applicazione browser o del visualizzatore può accedere direttamente alle relazioni tra le parti e avviare immediatamente l'assemblaggio delle risorse dipendenti senza conoscere lo schema, né analizzare il documento.

Relazioni delle informazioni

Analogamente a una nota o a un'annotazione, un PackageRelationship oggetto 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 nativo del file di spooling di stampa di Windows Vista. Un XpsDocument oggetto viene archiviato nel set di dati ZIP standard e può includere una combinazione di componenti XML e binari, ad esempio file di immagine e di tipo di carattere. Gli oggetti PackageRelationship vengono usati per definire le dipendenze tra il contenuto e le risorse necessarie per eseguire il rendering completo del documento. La XpsDocument progettazione offre una singola soluzione di documento ad alta fedeltà che supporta più usi:

  • Lettura, scrittura e archiviazione del contenuto di documenti statici e risorse come un file singolo, portabile e facile da distribuire.

  • Visualizzazione di documenti con l'applicazione XPS Viewer.

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

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

Vedi anche