This article is currently in the process of being translated into Italian (~99% done).
The FlowDocumentPageViewer control
Nell'articolo precedente abbiamo descritto il FlowDocumentScrollViewer, insieme ad alcune tecniche più generali riguardo ai FlowDocument. In quest'articolo ci concentreremo sul FlowDocumentPageViewer che, invece di offrire solo la possibilità di scorrere il testo quando diventa più lungo dello spazio disponibile, divide l'intero documento in pagine. Questo ti permette di navigare da una pagina all'altra, fornendo un'esperienza più simile a quella di leggere un libro.
Cominceremo con un semplice esempio, dove potremo vedere come il controllo FlowDocumentPageViewer gestisce il nostro testo di prova Lorem Ipsum :
<Window x:Class="WpfTutorialSamples.Rich_text_controls.FlowDocumentPageViewerSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FlowDocumentPageViewerSample" Height="300" Width="300">
<Grid>
<FlowDocumentPageViewer>
<FlowDocument>
<Paragraph>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce faucibus odio arcu, luctus vestibulum tortor congue in. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec lacinia neque. Donec malesuada, ligula non vestibulum cursus, urna purus pellentesque orci, aliquet accumsan dui velit ac justo. Phasellus sagittis ligula in leo dapibus, vel vestibulum felis mattis. Fusce vitae auctor nibh. Ut sit amet fringilla turpis. Aenean tincidunt feugiat sapien, quis scelerisque enim pretium commodo. Mauris fermentum posuere nulla, vitae fermentum quam malesuada in. Cras ultrices bibendum nulla eu mollis. Sed accumsan pretium magna, non sodales velit viverra id. Sed eu elit sit amet sem ullamcorper rhoncus.</Paragraph>
<Paragraph>Nulla vitae suscipit tellus. Nunc sit amet tortor fermentum, sollicitudin enim cursus, sagittis lacus. Pellentesque tincidunt massa nisl, nec tempor nulla consequat a. Proin pharetra neque vel dolor congue, at condimentum arcu varius. Sed vel luctus enim. Curabitur eleifend dui et arcu faucibus, sit amet vulputate libero suscipit. Vestibulum ultrices nisi id metus ultrices, eu ultricies ligula rutrum. Phasellus rhoncus aliquam pretium. Quisque in nunc erat. Etiam mollis turpis cursus, sagittis felis vel, dignissim risus. Ut at est nec tellus lobortis venenatis. Fusce elit mi, gravida sed tortor at, faucibus interdum felis. Phasellus porttitor dolor in nunc pellentesque, eu hendrerit nulla porta. Vestibulum cursus placerat elit. Nullam malesuada dictum venenatis. Interdum et malesuada fames ac ante ipsum primis in faucibus.</Paragraph>
</FlowDocument>
</FlowDocumentPageViewer>
</Grid>
</Window>
Nota come il testo in eccesso è separato e, in basso, puoi navigare tra le pagine. Questo non è, tuttavia, tutto quello che il FlowDocumentPageViewer può fare per te - guarda solo a quello che succede quando allarghiamo la finestra:
Invece di allungare il testo all'infinito, il FlowDocumentPageViewer ora lo divide il tuo testo in colonne, evitando che le linee diventino troppo lunghe. Oltre ad avere un bell'aspetto, questo aumenta la leggibilità in quanto delle linee molto lunghe sono difficili da leggere. Ovviamene il contatore di pagina è aggiornato automaticamente, portando il numero di pagine da 5 a 2.
La classe FlowDocument ha varie proprietà che ti permettono di controllare come quando vengono usate. Usarle è semplice ma un esempio esaustivo va al di là dell'obiettivo di questa guida. Invece, puoi dare un'occhiata a questo articolo in MSDN, dove diverse proprietà sono usate in un bell'esempio: How to: Use FlowDocument Column-Separating Attributes.
Effettuare delle ricerche
come stai per vedere nel prossimo capitolo, il contenitore (wrapper) FlowDocumentReader fornisce funzionalità di ricerca già pronte, con controlli per la ricerca nella tool bar e tutto il resto. Ad ogni modo, tutti e tre i contenitori di sola lettura per FlowDocument che saranno discussi in questo tutorial di fatto forniscono la funzionalità di ricerca, solo che nei primi due (FlowDocumentScrollViewer and FlowDocumentPageViewer) questa deve essere richiamata manualmente.
Tutti e tre i visualizzatori gestiscono la scorciatoia da tastiera Ctrl+F per iniziare una ricerca, ma se vuoi che questo sia accessibile anche da un pulsante, devi invocare il metodo Find(). Ecco un esempio:
<Window x:Class="WpfTutorialSamples.Rich_text_controls.FlowDocumentSearchSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="FlowDocumentSearchSample" Height="300" Width="580">
<DockPanel>
<WrapPanel DockPanel.Dock="Top">
<Button Name="btnSearch" Click="btnSearch_Click">Search</Button>
</WrapPanel>
<FlowDocumentPageViewer Name="fdViewer">
<FlowDocument>
<Paragraph>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce faucibus odio arcu, luctus vestibulum tortor congue in. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec lacinia neque. Donec malesuada, ligula non vestibulum cursus, urna purus pellentesque orci, aliquet accumsan dui velit ac justo. Phasellus sagittis ligula in leo dapibus, vel vestibulum felis mattis. Fusce vitae auctor nibh. Ut sit amet fringilla turpis. Aenean tincidunt feugiat sapien, quis scelerisque enim pretium commodo. Mauris fermentum posuere nulla, vitae fermentum quam malesuada in. Cras ultrices bibendum nulla eu mollis. Sed accumsan pretium magna, non sodales velit viverra id. Sed eu elit sit amet sem ullamcorper rhoncus.</Paragraph>
<Paragraph>Nulla vitae suscipit tellus. Nunc sit amet tortor fermentum, sollicitudin enim cursus, sagittis lacus. Pellentesque tincidunt massa nisl, nec tempor nulla consequat a. Proin pharetra neque vel dolor congue, at condimentum arcu varius. Sed vel luctus enim. Curabitur eleifend dui et arcu faucibus, sit amet vulputate libero suscipit. Vestibulum ultrices nisi id metus ultrices, eu ultricies ligula rutrum. Phasellus rhoncus aliquam pretium. Quisque in nunc erat. Etiam mollis turpis cursus, sagittis felis vel, dignissim risus. Ut at est nec tellus lobortis venenatis. Fusce elit mi, gravida sed tortor at, faucibus interdum felis. Phasellus porttitor dolor in nunc pellentesque, eu hendrerit nulla porta. Vestibulum cursus placerat elit. Nullam malesuada dictum venenatis. Interdum et malesuada fames ac ante ipsum primis in faucibus.</Paragraph>
</FlowDocument>
</FlowDocumentPageViewer>
</DockPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.Rich_text_controls
{
public partial class FlowDocumentSearchSample : Window
{
public FlowDocumentSearchSample()
{
InitializeComponent();
}
private void btnSearch_Click(object sender, RoutedEventArgs e)
{
fdViewer.Find();
}
}
}
Semplicemente premi il pulsante assegnato Search o la scorciatoia da tastiera (Ctrl+F) e tu avrai la funzione di ricerca nel FlowDocumentPageViewer. Come detto, questo funziona sia per FlowDocumentScrollViewer che per FlowDocumentPageViewer (FlowDocumentPageReader ha in automatico un pulsante cerca) ma assicuati che la casella di ricerca abbia sufficiente spazio in orizontale sulla toolbar - altrimenti non la vedrai quando invocherai il comando Find() !