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

WPF: stabilire le dimensioni dei controlli col databinding (VB 2008)

In questi giorni, nei forum di Visual Basic Tips & Tricks si è discusso su come sia possibile stabilire, in Windows Presentation Foundation, le dimensioni di un controllo utente a partire dalle dimensioni di un altro controllo, sfruttando il data-binding nel codice XAML.

In particolare, la richiesta riguardava la possibilità di assegnare dinamicamente la larghezza di una ProgressBar a partire dalla larghezza di una Label, in modo che entrambe siano di eguale larghezza.

In questo post, quindi, voglio più che altro descrivere la soluzione che ho proposto con l'aggiunta di una riga di codice VB per dimostrare che l'aggiornamento delle dimensioni avviene anche a run-time; parliamo, quindi, di un progetto WPF creato in Visual Basic 2008.

Abbiamo una semplice griglia:

        <Grid>

            <Grid.RowDefinitions>

                <RowDefinition/>

                <RowDefinition/>

                <RowDefinition/>

            </Grid.RowDefinitions> 

all'interno della griglia abbiamo una Label descrittiva, un pulsante che poi utilizzeremo a run-time, una ProgressBar che deve autoridimensionarsi:

            <Label Grid.Row="0" Height="30" Name="Label1" Content="Hello WPF!" HorizontalAlignment="Center"/>

            <Button Grid.Row="1" Height="30" Name="WidthButton" Width="150">Click to dinamically resize</Button>

            <ProgressBar Grid.Row="2" Height="15" MaxWidth="{Binding Path=ActualWidth, ElementName=Label1}"/> 

Nello XAML sopra esposto, consideriamo innanzitutto che non è stata specificata la larghezza della Label, questo per permetterle di adattarsi al testo che contiene. Nella riga relativa alla dichiarazione della ProgressBar, abbiamo utilizzato il databinding, tramite una markup extension ({Binding Path.. ElementName.. }) affinché la larghezza della barra sia corrispondente a quella della Label. E' importante sottolineare l'utilizzo della proprietà ActualWidth, poiché questa restituisce le dimensioni effettive del controllo in qualunque momento.

Ora passiamo al codice Visual Basic e gestiamo l'evento Click del pulsante in modo forse un po' bruttino ma che ci serve per una dimostrazione pratica:

    Private Sub WidthButton_Click(ByVal sender As System.Object, _

                                  ByVal e As System.Windows.RoutedEventArgs) Handles WidthButton.Click

 

        'Riassegno la proprietà Width della label leggendo

        'la larghezza effettiva aumentata di qualche unità

        Label1.Width = Label1.ActualWidth + 50

    End Sub 

Ora provate ad eseguire l'applicazione e a fare clic sul pulsante. Accadrà qualcosa di simile alla seguente figura che, ovviamente, non è in movimento (che ne dite se quando facciamo queste demo di applicazioni che devono mostrare qualcosa a runtime mettessi un piccolo video in Silverlight Streaming? ;-) ):

Chiaramente questo è solo un piccolissimo utilizzo del databinding di WPF che, usato in altri contesti, ha una potenza davvero entusiasmante. Spero sia utile!

Alessandro

Print | posted on martedì 6 gennaio 2009 20:47 | Filed Under [ Visual Basic Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET