Gianni Giaccaglini

Tricks & mini applics on WPF
posts - 46, comments - 0, trackbacks - 0

Primissimi passi in Visual Studio 2012

 

Primissimi passi in Visual Studio 2012

Questo articoletto, più che altro una testimonianza, si rivolge ai principianti Windows 8 e Visual Studio 2012 miei pari. Che solo di recente hanno come me installato (con  regolare acquisto nel mio caso) l’ultimo sistema operativo targato MS. Si veda al riguardo il resoconto di tale esperienza in
http://blog.shareoffice.it/giannigiaccaglini/articles/11310.aspx

unitamente alla recensione di un pratico manuale FAG:
http://www.fag.it/libro_windows_8_-_guida_all'uso_38987.aspx

Successivamente ho scaricato ed installato le versione Express di VS 2012 relativa al desktop (c’è pure quella, sempre express per il web, che un bel dì vedremo di esaminare). Mamma Microsoft si è mostrata davvero generosa. Il pacco comprende accanto a tutte le principali librerie il software Blend per Visual Studio con cui rendere più belli e accattivanti che pria le nostre App, un Windows App Cert Kit, che se il nome non inganna promette a tutto il mondo di salvare come app certificate proprie creature sul magazzino (Store) delle App. Tale opportunità vale per un mese ma è rinnovabile ogni 30 giorni a seguito preavviso alla scadenza.

Affaccendato e pigro qual sono non se e quando ne approfitterò, comunque ho subito constatato che l’esempietto ridicolo implementato che sto per descrivere è stato automaticamente “arruolato” in fondo alla App locali del mio PC.

Il primo esperimento

L’ho svolto concentrando in uno i vari passaggi, più o meno, di un utile testo del mitico Charles Petzold

Programming Windows 6^ Edition
writing Windows 8 Apps
Editore O’Reilly
www.oreilly.com

La cui ultima versione è arricchita e ampliata (fino a oltre 1000 pagine) per comprendere le librerie Surface per tablet e smartphone. Vedere la mia recensione che conto di aggiornare al più  presto:
http://community.visual-basic.it/GianniGiaccaglini/archive/2012/08/29/Introduzione-alla-interfaccia-di-Windows-8-by-Charles-Petzold.aspx

Quel che subito si scopre è una notizia che farà piacere a chi ha investito in WPF (Windows Presentation Foundation), e, absit iniuria verbis, a scorno di chi non l’ha ancora fatto: le app per Win 8 sfruttano il paradigma della programmazione dichiarativa espressa in linguaggio XAML. Tant’è vero che all’avvio del primo progetto, perlomeno appartenente al template più comune, si presenta una tipica finestra XAML, il cui incipit che si osserva sbirciandone il listato subito qui sotto è <Page>, cui al termine fa riscontro la tag di chiusura </Page>. Non è finita, perché dopo una serie di  direttive tra cui spiccano xmlns varie il primo progetto offre la coppia <Grid> </Grid>. Così noi pionieri dell’XMAL scopriamo che è la stessa zuppa, salvo il nome Page in luogo di Window delle tag estreme.

Nota. Il che potrebbe sanare la precedente ambiguità del termine “Windows” che ne impediva l’uso per l’insieme delle finestre XAML. Adesso “Panes” dovrebbe essere del tutto lecito…

Listato XAML

La pagina primaria del progettino è MainPage.xaml, cui farà riscontro il codice “sottostante” (behind code) in VB o C#, C++, Java. Essa è molto semplice e consiste nella definizione, e disposizione e altre proprietà degli oggetti inseriti nella griglia Grid. Questa, in assenza di indicazioni su righe e colonne, viene considerata come una cella unica. Inoltre i diversi componenti seguono la disposizione Z-order, che, in due parole, visualizza anteriormente quello definito più avanti nel listato.

<Page>

    x:Class="App1.MainPage"

    IsTabStop="False"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="using:App1"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d"

    FontFamily="Arial"

    FontSize="96">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

        <Image Source=
               "http://www.charlespetzold.com/pw6/PetzoldJersey.jpg"/>

        <Image Source=
              "http://www.giannigiaccaglini.it/download/GianniGiaccaglini.jpg"/>

        <TextBlock Text="

Salve, Windows 8!" FontStyle="Italic" Foreground="Red" HorizontalAlignment="Center" VerticalAlignment="Center" />

        <TextBlock Name="txtblk" FontSize="40" HorizontalAlignment="Center"  TextWrapping="Wrap" Margin="0,0,0,-61" Tapped="txtblk_Tapped_1">

             Quant'è bella giovinezza. Che si fugge tuttavia. Chi vuol esser lieto sia. Del diman non v'ha certezza.           

        </TextBlock>

        <Button Name="mioBtn" Click="CelaSvela" Margin="0,375,0,355" Width="153" Height="38" Content="Nascondi"/>

    </Grid>

</Page>

 

Il risultato si presenta così (clicca sul link seguente):

http://www.giannigiaccaglini.it/download/FigPrimissPassiInWin8.jpg

In particolare si nota subito che, rispettando il principio Z-order, l’immagine umoristica di C. Petzold si sovrappone alla sottostante del sottoscritto (maggiore per ampiezza, ma inferiore per risoluzione e umorismo).

Codice behind Visual Basic

Troppo banale per meritare commenti, pertanto mi limito a riprodurlo, aggiungendo soltanto un paio di osservazioni.

Public NotInheritable Class MainPage

    Inherits Page

‘ . . . .  OMISSIS . . . .

Dim sw As Boolean = False

    Private Sub txtblk_Tapped_1(sender As Object, e As TappedRoutedEventArgs)

        sw = Not sw

        If sw Then

            txtblk.FontSize = 20

        Else

            txtblk.FontSize = 40

        End If

    End Sub

    Private Sub CelaSvela()

        sw = Not sw

        If sw Then

            txtblk.Visibility = Windows.UI.Xaml.Visibility.Collapsed

            mioBtn.Content = "Visualizza"

        Else

            txtblk.Visibility = Windows.UI.Xaml.Visibility.Visible

            mioBtn.Content = "Nascondi"

        End If

    End Sub

End Class

 

L’effetto che fa, anzi i due, sono il dimezzamento della scritta in alto (da Cecco Angiolieri) alternato alla dimensione default, pronubo l’evento Tapped del TextBlock txtblk in combutto con lo switch sw. Quest’ultimo produce un analogo effetto altalenante ma occultando / visualizzando txtblk.

E le osservazioni promesse? Sono relative alla sintassi txtblk_Tapped_1 della routine d’evento che mi pare un poco diversa da quelle di precedenti edizioni e al fatto di aver sfruttato, per la solita pigrizia, una generica routine CelaSvela del tutto priva dei canonici argomenti sender ed e, alla quale fa riferimento l’argomento Click="CelaSvela" del Button mioBtn in XMAL (si riveda il listato).

Altro listato XAML ripreso da precedente soluzione WPF

Fiduciosi della possibilità di riciclare in modo abbastanza indolore precedenti lavori WPF riporto infine lo scheletro di una sezione della mia mini applicazione Griglia per Excel (v. http://community.visual-basic.it/GianniGiaccaglini/archive/2012/09/06/Visore-di-foglio-Excel-spartano-ma-carino.aspx ).

<Grid Name="miaGrid" ShowGridLines="True" Height="487" Width="627">

        <Grid.RowDefinitions>

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

. . . . . . . . .

            <RowDefinition Height="25*" />

            <RowDefinition Height="27*" />

            <RowDefinition Height="27*" />

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="50" />

            <ColumnDefinition Width="100*" />

            <ColumnDefinition Width="100*" />

            <ColumnDefinition Width="100*" />

            <ColumnDefinition Width="100*" />

            <ColumnDefinition Width="100*" />

            <ColumnDefinition Width="100*" />

        </Grid.ColumnDefinitions>

 . . . . . . . . .

    </Grid>

 

L’invito a curiosi & volonterosi è di inserire nelle celle di tale canovaccio, a sua volta da infilare in una Page VS 2012, gli oggetti, TextBox, Label e Button vari descritti nel testé citato articolo. Sono pronto a scommettere che il risultato, a parte le dimensioni della finestra, sarà lo stesso.

 


DOMANDE VARIE

Le pongo ai più esperti.

·        1) Le nuove App si presentano prive dei classici pulsanti Riduci a icona, Ingrandisci e Chiudi. C’è qualche (nuovo) modo per ridimensionarle? E come le si può chiudere, oltre che con Alt+F4?

·        2)  Il metodo MessageBox sembra sparito. Ne esiste un qualche equivalente o ci si deve arrangiare con una Page ad hoc?

·         3) Le App nuove o scaricate sono segnate nel Registro? O sono degli eseguibili fruibili in ogni macchina, beninteso dotata di Win 8? Addirittura su una chiavetta USB?

·        4)  Il doppio clic su un Button non genera automaticamente, come nei VB precedenti, la routine dell’evento Click coi soliti due argomenti sender ed e: è vero o no?

 

Print | posted on giovedì 17 gennaio 2013 16:08 |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 7 and 3 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET