Aero style con WPF

di Cristian Civera, in WPF,

In WPF si può dire che i controlli di default non hanno un layout, ma è lo style ad esso applicato che gli dà un certo aspetto e funzionalità. Poiché una finestra in Avalon è indipendente delle care e vecchie librerie Win32 in WPF l'interfaccia emula quella del sistema operativo corrente mediante l'uso degli style. Questi possono applicarsi a qualsiasi tipo, come un Button o una TextBox o identificabili per chiave.

Quando scriviamo codice xaml e lo compiliamo, produciamo un assembly contenente nelle risorse il file xaml stesso, ottimizzato per dimensione e velocità di caricamento che prende il nome di baml.
Spulciando tra gli assembly di WinFX si trovano due assembly di nome PresentationFramework.Classic e PresentationFramework.Luna che contengono solo le risorse di styling per Windows Classic e Windows Luna (lo style di XP).

Tutta questa introduzione è per dirvi che nella CTP di dicembre ho trovato anche un PresentationFramework.Aero che mi ha illuminato e mi ha spinto a trovare un modo per forzare l'uso dello style di Aero (nome in codice dello style di Vista) anche su XP o Windows 2003.

Impostare uno style a runtime è relativamente semplice: gli Style si definisco all'interno della dictionary Resources esposto da ogni FrameworkElement. Questo permette di definire style limitati ad un contenitore oppure a livello di intera applicazione tramite Application.Resources.

Per caricare invece un file xaml nella classe Application è disponibile il metodo LoadComponent (sfruttato dal compilatore di WPF) che vuole l'uri della risorsa xaml o baml e restituisce l'object istanziando c'ho che appunto la struttura xml rappresenta. Poiché la risorsa in questione si trova in un'altra dll, ho navigato con il buon reflector e fortunatamente ho scovato la formattazione dell'uri per prelevare una risorsa da un'assembly:

nomeAssembly;V1.0.0.0;token;nomeRisorsa

Detto questo, con le seguenti tre righe di codice ecco come applicare lo style di Aero:

Dim u As New Uri("PresentationFramework.Aero;V6.0.5070.0;31bf3856ad364e35;component\themes/aero.normalcolor.baml", UriKind.RelativeOrAbsolute)
Dim aero As Object = Application.LoadComponent(u)
Me.Resources = aero

Sinceramente non mi è chiaro quel component\ iniziale poiché il nome della risorsa è solo themes/aero.normalcolor.baml, ma spero di scoprirlo.
Ed eccovi il risultato

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese