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: istanziare e stilizzare controlli a runtime con Visual Basic 2008

Nel forum WPF di Visual Basic Tips & Tricks si è discusso di come assegnare uno stile o un control template a un controllo utente a run-time, utilizzando codice Visual Basic 2008. In effetti spesso siamo abituati a stilizzare i nostri controlli in fase dichiarativa, da codice XAML, ma può capitare la necessità di istanziare e aggiungere controlli all’interfaccia anche in fase di esecuzione.

 

Ciò premesso, immaginiamo di avere un semplice stile definito nelle risorse della finestra principale:

 

    <Window.Resources>

        <Style x:Key="myStyle" TargetType="Button">

            <Setter Property="Width" Value="100"/>

            <Setter Property="Height" Value="30"/>

            <Setter Property="Margin" Value="5"/>

        </Style>

    </Window.Resources>

 

Molto semplice J Ora immaginiamo di voler assegnare questo stile a un pulsante, contenuto in uno StackPanel, direttamente da XAML:

 

    <StackPanel Name="Stack1">

        <Button Style="{StaticResource myStyle}" Name="FirstButton"/>

    </StackPanel>

 

Niente di trascendentale, come vedete, e sono cose che già conoscete. Ora passiamo al codice Visual Basic e supponiamo di voler istanziare un nuovo Button al caricamento della finestra, assegnando al Button stesso lo stile sopra definito.

 

Possiamo agire come segue:

 

Class Window1

    Private WithEvents AnotherButton As Button

 

    Public Sub New()

 

        ' This call is required by the Windows Form Designer.

        InitializeComponent()

 

        'Uso FindResource per trovare la risorsa e la converto nel tipo appropriato

        AnotherButton = New Button With {.Style = CType(FindResource("myStyle"), Style)}

        'Devo ricordare di aggiungere il controllo ai "figli" del contenitore

        Me.Stack1.Children.Add(AnotherButton)

 

    End Sub

End Class

 

In sostanza, si assegna la proprietà Style del controllo con il contenuto della risorsa che definisce lo stile e che viene recuperata mediante l’utilizzo del metodo FindResource, opportunamente convertita nel tipo desiderato (questo perchè FindResource consente di recuperare tutti i tipi di risorsa, di conseguenza è necessario esegure la conversione nel tipo corrispondente).

 

Se ora provate ad eseguire il codice sopra esposto, otterrete una finestra decisamente bruttina ma con due pulsanti, uno dichiarato da XAML, uno istanziato da codice ma entrambi sono stilizzati secondo lo Style predisposto.

 

Ovviamente, questo tipo di tecnica non funziona solo con gli stili ma anche con i control template. Per esempio, potremmo dichiarare un control template per ridefinire l’aspetto dei Button e assegnarlo a runtime a nuovi pulsanti nello stesso modo visto in precedenza.

 

La seguente figura mostra un esempio di ciò che si potrebbe fare utilizzando un control template (che ovviamente ho realizzato con Expression Blend e non con Visual Studio! J):

 

 

Il codice del control template è piuttosto complesso quindi non lo includo nel post ma potete trovare il tutto, sia la versione semplice che quella con control template funzionante, in una soluzione per Visual Basic 2008 disponibile nell’area Download di VB T&T e che potete scaricare facendo clic qui.

 

Alessandro

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

Powered by:
Powered By Subtext Powered By ASP.NET