Alessandro Del Sole's Blog

/* A programming space about Microsoft® .NET® */

  Home :: Contact :: Syndication  :: Login
  1204 Posts :: 64 Stories :: 1555 Comments :: 251 Trackbacks

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Microsoft MVP

My MVP Profile

My MVP Corner Page

Il mio libro su VB2010!

Il mio nuovo libro su Visual Basic 2010 E' uscito il mio libro "Visual Basic 2010 Unleashed". Clicca sulla copertina per informazioni!

Visual Basic Tips & Tricks Team Member

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Windows Live Alerts

Vsi Builder 2008

Il mio tool per VS 2005/2008 Scarica Vsi Builder, il mio tool per Visual Studio 2005/2008!

Aggiungimi al Social MSDN!

Dove vivo

Contattami su Messenger


Grab this badge here!

Guarda i miei webcast MSDN

CyberInstaller Beta Tester

Scarica il nuovo CIS 2009!!

Altri spazi

CodePlex download Scarica i miei progetti open-source su CodePlex!

Cerca nel blog



Seguimi su Twitter!

Article Categories

Archives

Post Categories

Image Galleries

.NET Framework

Back to basics

Blogroll

Help 1.x e 2.0

Microsoft & MSDN

Setup & Deployment

Visual Basic .NET e 2005

In un precedente post abbiamo visto come sia semplice, in Windows Presentation Foundation, stampare controlli dell’interfaccia. Ma probabilmente lo scenario più comune è quello della stampa dei documenti che, in WPF, è altrettanto semplice.

 

Si fa ricorso anche in questo caso alla classe PrintDialog, ma questa volta il metodo da utilizzare si chiama PrintDocument. In particolare è possibile utilizzarlo per stampare i FlowDocument, quel particolare tipo di documenti WPF che hanno la caratteristica della dinamicità e della riadattabilità nel layout. Se avete letto il mio libro su .NET Framework 3.x (a proposito, siete in tantissimi, grazie J) ne avete visto un esempio.

 

Partiamo quindi dalla base, un FlowDocument che riporterà, in questo specifico esempio, parte del testo del mio ultimo articolo su ADO.NET Data Services per VB T&T. Creato un nuovo progetto WPF in Visual Basic 2008, digitate il seguente XAML (o, se preferite, potete limitare il testo del documento):

 

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition/>

            <RowDefinition Height="30"/>

        </Grid.RowDefinitions>

       

        <FlowDocumentReader Grid.Row="0">

            <FlowDocument Name="flowDoc" FontFamily="Verdana" FontSize="12"

                          TextAlignment="Justify"

                            IsOptimalParagraphEnabled="True"

                            IsHyphenationEnabled="True"

                            IsColumnWidthFlexible="True"

                            ColumnWidth="300"

                            ColumnGap="20"

                            Background="White">

                <Paragraph FontWeight="Bold">

                    Introduzione agli ADO.NET Data Services con Visual Basic 2008 - Seconda parte: il client WPF</Paragraph>

                <Paragraph Foreground="Red">

                    a cura di Alessandro Del Sole (requisiti: conoscenze di base su LINQ, WPF e WCF)</Paragraph>

                <Paragraph FontWeight="Bold">

                    Introduzione

                </Paragraph>

                <Paragraph>

                Nella

<Hyperlink NavigateUri="http://www.visual-basic.it/areaarticoli.asp?articolo=adsAdoNetDataServices1.htm">prima parte</Hyperlink> di questa mini serie di articoli introduttivi agli ADO.NET Data Services in Visual Basic 2008, abbiamo visto come creare con Visual Studio un servizio basato su WCF per esporre in rete dei dati attraverso un approccio REST (REpresentational State Transfer) sfruttando il modello a oggetti offerto da ADO.NET Entity Framework.

 

In questa seconda parte completeremo l'introduzione all'argomento passando alla creazione di un'applicazione client basata su Windows Presentation Foundation e faremo utilizzo di LINQ to Data Services per interrogare i dati.

 

Vedremo aspetti decisamente interessanti della creazione di applicazioni data-centric con WPF, ma il codice da scrivere stavolta non sarà poco e richiederà una certa dimestichezza con WPF e LINQ, poiché, essendo di media complessità, non potremo soffermarci a spiegare ogni aspetto delle menzionate tecnologie. Ci soffermeremo in particolare su tutto ciò che riguarda gli ADO.NET Data Services, limitandoci ad accenni su tutto il resto.

 

Anche in questo caso potete utilizzare le edizioni Express di Microsoft Visual Studio 2008.

Con riferimento a quanto visto la volta precedente, è possibile utilizzare Visual Web Developer Express per creare il servizio, mentre, con riferimento al presente articolo, è possibile utilizzare Visual Basic 2008 Express che permette di creare le applicazioni client alle quali è possibile aggiungere riferimenti ai servizi WCF.

                </Paragraph>

            </FlowDocument>

        </FlowDocumentReader>

        <Button Width="100" Height="25" Grid.Row="1" Content="Print" Name="Button1" />

    </Grid>

 

Come ricorderete, ogni FlowDocument dev’essere contenuto in un controllo in grado di visualizzarlo e il FlowDocumentReader è uno di questi. Inoltre, ciascun FlowDocument è costituito da tanti Paragraph, ciascuno dei quali è personalizzabile utilizzando le apposite proprietà. La formattazione del documento è abbastanza semplice, poiché ci interessa in particolare vedere come avviene la stampa più che la formattazione del testo. Mi limito a sottolineare l’utilizzo di un HyperLink direttamente nel testo per aggiungere un collegamento ipertestuale secondo il classico stile di XAML.

Il designer WPF di Visual Studio 2008 si presenta, quindi, come in figura:

 

 

 

Ora passiamo al file di code-behind, Window1.xaml.vb, per definire il gestore di evento Click del pulsante di stampa:

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

        Dim pDialog As New PrintDialog

 

        If pDialog.ShowDialog = True Then

 

            Dim paginator As DocumentPaginator = CType(flowDoc, IDocumentPaginatorSource).DocumentPaginator

 

            pDialog.PrintDocument(paginator, "Test printing")

        End If

    End Sub

 

Il DocumentPaginator è un oggetto che permette di creare elementi a più pagine a partire da un singolo documento ed è il tipo di oggetto supportato dal metodo PrintDocument, pertanto si rende necessaria la conversione appena vista nel codice.

 

Se provate ad avviare l’applicazione di esempio, potete fare clic sul pulsante Print per stamparlo. La figura seguente mostra il risultato della stampa del FlowDocument tramite la stampante virtuale di Windows per documenti XPS:

 

 

Semplice, no? J

 

Alessandro

posted on Wednesday, December 24, 2008 12:49 PM

Feedback

No comments posted yet.

Post Feedback

Title:
Name:
Url:
Comments: 
Codice di sicurezza
Protected by FormShield