Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

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

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

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

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Implementare i menu in WPF

Aggiungere i menu alle applicazioni Windows Presentation Foundation è un procedimento abbastanza diverso da quello a cui siamo abituati con Windows Forms. Con Windows Forms, infatti, il designer di Visual Studio consente di aggiungere rapidamente il menu e i suoi elementi, digitando direttamente le varie voci e le eventuali voci figlie. A mio avviso, questo è più intuitivo di quanto avviene con WPF, come ora vedremo.

Per quanto in Windows Presentation Foundation sia ancora possibile aggiungere il controllo Menu trascinandolo dalla toolbox, si deve considerare che le relative voci dovrebbero essere disegnate e poi "riempite". E' evidente come questo sia altamente sconsigliabile utilizzando mouse e toolbox. E allora, come sempre, si utilizza XAML :-)  Considerate il seguente code snippet:

  <DockPanel LastChildFill="True">
    <Menu DockPanel.Dock="Top" VerticalAlignment="Top">
      <MenuItem Header="File">
        <MenuItem Header="Esci" Click="QuitCommandHandler" IsEnabled="True">
          <MenuItem.Icon>
            <Image Source="ICONA.png" />
          MenuItem.Icon>
        MenuItem>
      MenuItem>
    Menu>
  DockPanel>

In primo luogo stabiliamo l'utilizzo di un contenitore DockPanel, anzichè, ad esempio, Grid o StackPanel , perchè consente di ancorare i controlli a seconda del'orientamento stabilito (in questo caso abbiamo stabilito che il menu deve essere ancorato in alto).

Ogni voce di menu è costituita da un elemento MenuItem. Secondo la gerarchia tipica di XAML, anche i comandi contenuti all'interno delle voci di menu sono elementi MenuItem. In questo caso, l'attributo Header stabilisce il testo da mostrare, l'attributo IsEnabled stabilisce che il comando è attivo, l'attributo Click stabilisce il gestore di evento da richiamare quando l'utente clicca sulla voce selezionata. Esiste un attributo chiamato IsCheckable che permette di stabilire se la voce può essere contrassegnata da un segno di spunta. Per assegnare una bitmap alle voci di menu, si utilizza la proprietà MenuItem.Icon. La risorsa o il file viene specificato mediante l'elemento Image. Notate, anche in questo frangente, la logica gerarchica di implementazione.

Si passa poi al file di code-behind. E' importante ricordare che, ancora al contrario di quanto avviene in Windows Forms, non è possibile fare doppio click sull'oggetto di interesse nel designer per accedere al suo codice (problematica, questa, che sarà risolta con il rilascio di VS 2008). Il comando di menu che abbiamo prima inserito deve consentire di chiudere l'applicazione. Il codice gestito da utilizzare è il seguente.

VB:

    Private Sub QuitCommandHandler(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Application.Current.Shutdown()
    End Sub

C#:

        private void QuitCommandHandler(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }

L'oggetto Application è di fondamentale importanza in WPF, poichè permette di conoscere molti aspetti dell'applicazione e di interagire con l'applicazione stessa.

Avviando l'applicazione, questo è il risultato ottenuto:

Cliccando sul comando Esci, l'applicazione viene chiusa. Ovviamente è possibile strutturare in maniera molto più articolata i menu e personalizzarli in modo più approfondito. Poichè ho perso non poco tempo a capire come si disegnano i menu in WPF, ritengo che questa breve introduzione vi possa tornare utile.

Alessandro

Print | posted on giovedì 19 luglio 2007 21:01 | Filed Under [ Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET