Evviva!
Ho appena finito la mia
prima ricetta!!! Ingredienti: un Visual Studio
2005, il WinFX SDK installato, una spruzzatina
di files XAML, una manciata di samples presi
direttamente dal Windows SDK, un pizzico di buon vecchio C#. Fate cuocere
lentamente con un po' di pazienza et voilà...ecco un bel EXE che sfrutta
WPF/Indigo per mostrare button e chi ne ha più ne metta.
Ma procediamo con calma. Dal Windows SDK ho preso un semplice semplice
sample, una piccola applicazione che non fa altro che mostrare una Windows Forms
con sopra un po' di button, generati dai files XAML di corredo. Apro il progetto
con il mio VS2005.
Il Solution Explorer presenta già qualcosa di carino: c'è un
file MyApp.xaml con indentato il file MyApp.xaml.cs. Poi, ancora un file Pane1.xaml ed il corrispondente Pane1.xaml.cs. Sorrido, vado diretto a cliccare con il destro
sul nome del progetto (ButtonAlign) e poi su Rebuild. La status
bar di VS2005 riporta un bel Rebuild All succeeded. Se lancio
l'EXE appena generato, ecco che appare la mia prima WF generata con WinFX:
Davvero orribile, con quel giallo, non è vero? Ovviamente, mi sono dato da fare e ho dato uno
sguardo ad uno dei due file XAML inclusi nel progetto. Come sapevo già dalle
sessioni seguite allo SMAU, si tratta di XML che non fa altro che definire
l'aspetto grafico della Windows Form, posizionando pulsanti, definendo colori,
bordi, spessore dei bordi, font e così via. Ma non solo: definisce anche alcuni
parametri importanti, come il name del controllo ed alcuni
eventi che il controllo dovrà gestire. Ecco un estratto del
file XAML che ho guardato:
<DockPanel Margin="30,10,3,3" Grid.Column="0" Grid.Row="2">
<Button Name="btn1" Background="Pink" BorderBrush="Black" BorderThickness="1" Click="OnClick1">ClickMe1</Button>
<Button Name="btn2" Background="LightBlue" BorderBrush="Black" BorderThickness="1" Click="OnClick2">ClickMe2</Button>
<Button Name="btn3" Click="OnClick3">Reset</Button>
</DockPanel>
Qui viene definito un DockPanel (che io immagino come
un <DIV/> del buon HTML) che contiene a sua volta tre button
(btn1, btn2 e btn3). Notare
gli altri attributi che impostano l'aspetto dei button. Notare soprattutto
l'attributo Click che specifica la function che dovrà essere
eseguita allo scatenarsi dell'evento corrispondente, in questo caso il buon
Click. Qui ci sono rimasto male, perchè ho subito pensato che
tutta l'architettura di WinFX andasse a distruggere/eliminare/soppiantare in
qualche modo tutto quello che sappiamo sugli handler e compagnia bella (in
pratica, pensate al codice dell'InitializeComponent). Beh, non
è proprio così.
Ho fatto un piccolo esperimento per capire come
stanno meglio le cose. Ho preso un Button
qualsiasi tra quelli definiti nello XAML, e ho messo nell'attributo
Click un handler inesistente, inventato di sana pianta. Ho
scritto "pippo", poi ho ricompilato. Nella task-list VS2005 mi segnala
giustamente un errore, perchè la classe non contiene alcuna
definizione per "pippo". Il file di riferimento è Pane1.g.cs. Nella
Solution Explorer non c'è questo file, per cui faccio banalmente doppio-click
sulla task-list. Cosa succede???
Mi appare un file, Pane1.g.cs, contenente codice C# che a tutti gli effetti
contiene la InitializeComponent, associa gli handler, fa un po'
di serialization, etc. etc. Dov'è questo file? Perchè non lo vedo nemmeno nella
directory dei sorgenti? E' un file reale oppure no? Chi sono? Da dove vengo?
Cosa ci faccio qua?
Quindi, insomma, ecco....uhm.....compilo i progetti, per questa sera basta ed
avanza. Ho qualche dubbio e qualche incomprensione. Vedrò di leggermi
qualcosa domani mattina, se avrò tempo. Tra i dubbi più pesanti, è come creare
un nuovo file XAML, con il codice C# corrispondente: la UI di VS2005 li mostra
indentati (.xaml --> .cs) e non sono riuscito a riprodurre questa
situazione.