Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, 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

WPF: Creare una LinkLabel con Visual Basic 2008

Tempo addietro, nel forum WPF di Visual Basic Tips & Tricks venne chiesto come creare, in Windows Presentation Foundation, un controllo analogo alla LinkLabel di Windows Forms.

La cosa è davvero molto semplice. Si parte da un controllo Label, il cui contenuto non sarà semplice testo bensì un controllo HyperLink. Considerate il seguente frammento di codice XAML che realizza l'obiettivo e rimanda al mio profilo MVP:

        <Label Width="150" Height="30">

            <Hyperlink NavigateUri="https://mvp.support.microsoft.com/profile/Alessandro.Del%20Sole"

                       Hyperlink.RequestNavigate="Hyperlink_RequestNavigate" >

                <TextBlock Text="Alessandro Del Sole" />

            </Hyperlink>

        </Label>

Il testo da visualizzare nell'HyperLink è determinato da un controllo TextBlock, mediante la sua proprietà Text. Circa l'HyperLink, la proprietà NavigateUri assegna uno specifico indirizzo Internet a quel controllo. Tutto questo è possibile grazie al ContentPresenter, quel particolare controllo WPF che permette di mostrare all'utente, all'interno del controllo che lo contiene (e definito nel control template), qualunque tipo di elemento come testo, immagini, video e altri controlli come l'HyperLink.

E' poi necessario prevedere un gestore per l'evento RequestNavigate che si verifica quando l'utente clicca sul collegamento. L'evento RequestNavigate si utilizza tipicamente in applicazioni client (non XBAP). Il codice del gestore di tale evento è il seguente:

    Private Sub Hyperlink_RequestNavigate(ByVal sender As System.Object, ByVal e As System.Windows.Navigation.RequestNavigateEventArgs)

        Process.Start(New ProcessStartInfo(e.Uri.AbsoluteUri))

 

        e.Handled = True

    End Sub

In sostanza, mediante la proprietà e.Uri.AbsoluteUri, otteniamo l'indirizzo associato all'HyperLink e, mediante il metodo Process.Start, lo inviamo al browser predefinito. Notate che la classe System.Windows.Navigation.RequestNavigateEventArgs appartiene alla categoria dei routed events, di conseguenza potremmo associare quest'unico gestore di evento a tutti gli eventuali Hyperlink posti nella nostra finestra ed essere sicuri che quel singolo gestore sarà in grado di inviare al browser ciascun indirizzo associato ai vari Hyperlink. Ottimo, no?

Il codice XAML sopra citato produce il seguente risultato:

facendo clic sul link verrà poi aperto, nel browser predefinito, il sito corrispondente. Ma non è tutto: questa sorta di LinkLabel personalizzata, può anche essere modificata mediante l'utilizzo degli stili. Supponiamo, per esempio, che il colore di primo piano sia il viola e che, al passaggio del mouse (IsMouseOver), il colore deve divenire a gradiente. Possiamo definire uno stile come segue:

        <Label Width="150" Height="30">

            <Label.Resources>

            <Style TargetType="Hyperlink" x:Key="HyperStyle">

                <Setter Property="Foreground" Value="Violet"/>

                <Style.Triggers>

                    <Trigger Property="IsMouseOver" Value="True">

                        <Setter Property="Foreground">

                            <Setter.Value>

                                <LinearGradientBrush>

                                    <GradientStop Color="Orange" Offset="0"/>

                                    <GradientStop Color="Yellow" Offset="0.6"/>

                                    <GradientStop Color="Red" Offset="1"/>

                                </LinearGradientBrush>

                            </Setter.Value>

                        </Setter>

                    </Trigger>

                </Style.Triggers>

            </Style>

            </Label.Resources>

che richiameremo nell'HyperLink come segue:

            <Hyperlink NavigateUri="https://mvp.support.microsoft.com/profile/Alessandro.Del%20Sole"

                       Hyperlink.RequestNavigate="Hyperlink_RequestNavigate"

                       Style="{DynamicResource HyperStyle}">

                <TextBlock Text="Alessandro Del Sole" />

            </Hyperlink>

        </Label>

Lascio a voi la curiosità di vedere il risultato finale di questo codice :-) Ad ogni buon conto, creare una LinkLabel in WPF è davvero molto semplice, grazie alla logica gerarchica che contraddistingue questi controlli.

Alessandro

Print | posted on domenica 9 novembre 2008 22:20 | Filed Under [ Visual Basic Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET