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

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

Windows 7 e WPF 4: interagire da codice con la Jump List

Se avete installato Windows 7, vi sarete sicuramente accorti di una delle sue novità, ossia la Jump List. In sostanza, quando fate clic destro su un'icona sulla task bar, avrete accesso a un menu contestuale contenente un elenco di attività comuni o semplicemente l'elenco dei file recenti, suddivisi per gruppi e categorie. Con WPF 4 e Visual Basic (o C#) 2010 è possibile interagire da codice con la Jump List al fine di poter associare elenchi di elementi afferenti la propria applicazione, da rendere fruibili all'utente nel momento in cui si fa clic destro sull'icona dell'applicazione stessa nella Task Bar.

WPF 4 espone il namespace System.Windows.Shell che offre alcune classi che consentono di accedere alla Jump List, in particolare la classe JumpList che rappresenta proprio il particolare menu di popup. Supponiamo di voler aggiungere all'icona della nostra applicazione un ipotetico elenco di file recenti, attraverso la Jump List. Dopo aver creato un progetto WPF con Visual Studio 2010, iniziamo col dire all'applicazione che deve avere un riferimento alla Task Bar di Windows 7. Lato XAML, questo si ottiene così:

    <Window.TaskbarItemInfo>

        <TaskbarItemInfo/>

    </Window.TaskbarItemInfo>

Successivamente scriviamo il seguente codice managed, commentato per facilitare la lettura:

Imports System.Windows.Shell

 

Class MainWindow

 

    Private Sub MainWindow_Loaded(ByVal sender As Object,

                                  ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded

 

        'Rappresenta un riferimento alla JumpList per

        'l'applicazione corrente

        Dim myJumpList As New JumpList

        'Rappresenta un collegamento a un'applicazione

        'nella JumpList

        Dim myJumpTask As New JumpTask

Quindi la classe JumpList rappresenta il menu di contesto e JumpTask è un oggetto che rappresenta un collegamento a un'applicazione, che può essere personalizzato ad esempio con un parametro da passare all'eseguibile. Una volta creata l'istanza della JumpList, la si assegna all'applicazione corrente col metodo statico JumpList.SetJumpList:

        'Assegna all'applicazione corrente l'istanza della JumpList

        JumpList.SetJumpList(Application.Current, myJumpList)

Successivamente si impostano le proprietà dell'elemento JumpTask e si assegna quest'ultimo alla JumpList, come nel seguente esempio commentato:

        'Imposta le proprietà del collegamento

        With myJumpTask

            .CustomCategory = "Recent files"

            .Title = "My Sample Document"

            .Description = "A sample document containing custom information"

            .ApplicationPath = "Notepad.exe"

            .Arguments = "My Sample Document.txt"

        End With

 

        'Aggiunge l'elemento alla JumpList

        myJumpList.JumpItems.Add(myJumpTask)

        'Applica le modifiche

        myJumpList.Apply()

 

    End Sub

Quando avviate l'applicazione per la prima volta, il sistema memorizzerà quanto creato da codice in modo che l'elemento sarà disponibile nella Jump List dell'applicazione ad ogni suo avvio. Se infatti il sistema rileva l'elemento come già esistente, il codice non lo creerà di nuovo. Per dimostrare meglio il concetto esposto, modifichiamo il basilare esempio appena mostrato.

La classe JumpList espone anche due eventi, JumpItemsRejected che si verifica se Windows 7 non accetta l'inserimento di elementi nella Jump List, e JumpItemsRemovedByUser che si verifica quando l'utente elimina dalla Jump List un elemento facendo clic destro. Dopo la dichiarazione di istanza della JumpList aggiungiamo la seguente specifica:

        'Assegna un gestore di evento per JumpItemsRemovedByUser

        AddHandler myJumpList.JumpItemsRemovedByUser,

                   AddressOf myJumpList_JumpItemsRemovedByUser

poi specifichiamo il gestore di evento, che si limita a mostrare il numero di elementi rimossi:

    Private Sub myJumpList_JumpItemsRemovedByUser(ByVal sender As Object,

                                                  ByVal e As JumpItemsRemovedEventArgs)

        MessageBox.Show(CStr(e.RemovedItems.Count))

    End Sub

Ora provvediamo ad aggiungere un ulteriore elemento alla Jump List, di seguito al precedente:

        Dim myJumpTask2 As New JumpTask

        With myJumpTask2

            .CustomCategory = "Recent files"

            .Title = "My Sample Document2"

            .Description = "A sample document containing custom information"

            .ApplicationPath = "Notepad.exe"

            .Arguments = "My Sample Document2.txt"

        End With

 

        'Aggiunge l'elemento alla JumpList

        myJumpList.JumpItems.Add(myJumpTask2)

Ora, se avviamo l'applicazione e facciamo clic destro sulla sua icona nella task bar, ecco cosa otteniamo:

Come vedete gli elementi da noi specificati nel codice sono stati aggiunti alla Jump List e raggruppati in un gruppo chiamato Recent Files. Se facciamo clic su uno degli elementi, verrà avviato il Notepad di Windows che punterà a dei file fittizi. Ovviamente nel codice possiamo specificare un eseguibile diverso, che nella normalità dei casi sarà quello dell'applicazione corrente. Ora facciamo clic destro su uno degli elementi e scegliamo il comando di eliminazione. Noterete che l'evento JumpItemsRemovedByUser non viene scatenato ora. Verrà infatti lanciato solo al successivo riavvio dell'applicazione e questo farà sì che il codice non creerà nuovamente l'elemento finchè non riavvieremo l'applicazione ancora una volta. In questo modo viene preservata la volontà dell'utente di mantenere o rimuovere l'elemento. La prova migliore la potete fare avviando l'eseguibile al di fuori di Visual Studio 2010. Concludendo, la Jump List è un'altra importante caratteristica di Windows 7 e WPF 4 rende, ancora una volta, più semplice lo sviluppo per questo sistema operativo.

Il codice sorgente a corredo del post è disponibile in area Download di VB T&T a questo indirizzo.

Alessandro

Print | posted on martedì 19 gennaio 2010 16:57 | Filed Under [ Visual Basic Windows Presentation Foundation Windows 7 ]

Powered by:
Powered By Subtext Powered By ASP.NET