Passa ai contenuti principali

Post

Visualizzazione dei post da gennaio, 2010

Briciole di WPF: Ma quanti colori vuoi?!?!?

Questa briciola è dedicata alla structure Color presente nel namespace System.Windows.Media. Di fatto si tratta della nuova struttura di colore introdotta da WPF che viene utilizzata dal presentation framework al posto della vecchia Color del namespace System.Drawing. Ci sono due grandi differenze “esteriori” tra le due strutture. La prima differenza è che la vecchia struttura può rappresentare 16.777.216 di colori essendo le sue componenti RGB rappresentate da 1 Byte ciascuno (256 possibili valori). Ogni terna di valori RGB ha, inoltre, 256 possibili valori di trasparenza. La nuova struttura, invece, ha anche la possibilità di esprimere le componenti RGB (e Alfa) con dei valori di tipo Single (solo positivi o nulli) e, quindi, in linea teorica con un range di colori molto più ampio. La nuova struttura nasce con lo scopo di supportare lo standard scRGB ( wiki docet ). La struttura Color di WPF mette ancora a disposizione dello sviluppatore le proprietà (A, R, G, B) che riport

Briciole di WPF : InkCanvas e gesture

In questo post vorrei farvi vedere come poter riconoscere le gesture (cioè i movimenti) che l’utente può fare con il mouse, con le dita o con un eventuale stilo utilizzando il contenitore InkCanvas. Il controllo InkCanvas, in realtà, si può utilizzare per intercettare i “gesti” dell’utente, per disegnare, per selezionare una porzione di interfaccia o per tutte queste funzionalità contemporaneamente. Cominciamo col dire che per poter utilizzare l’InkCanvas solo per intercettare le gesture dell’utente è necessario impostare la proprietà EditingMode con il valore InkCanvasEditingMode.GestureOnly. L’enumerazione InkCanvasEditingMode contiene tutti i possibili comportamenti dell’InkCanvas: GestureOnly : il controllo rileva le gesture. In questo caso l’utente lascia un segno sulla superficie del controllo ma questo sparisce al termine della singola gesture; EraseByPoint : permette di cancellare una parte di un precedente disegno passando il pennino come una gomma; EraseB

Briciole di WPF : Single instance application (soluzione 2).

Nel precedente post abbiamo visto una soluzione al problema della mancanza della possibilità di avviare un’applicazione WPF come singola istanza. In questo post vorrei proporvi un’altra soluzione al problema che si basa sull’utilizzo della classe Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase che espone dei metodi per la gestione di un’applicazione Windows Form. Il concetto di fondo è quello di sostituire, per la gestione del ciclo di vita dell’applicazione WPF, la classe Application con la classe WindowsFormsApplicationBase, o per meglio dire con una sua derivata. Creiamo la classe: Public Class SingleInstanceApplication      Inherits Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase        Friend Sub New ()          Me .IsSingleInstance = True      End Sub        Private _app As WPFApplication.Application        Protected Overrides Function OnStartup( ByVal eventArgs As Microsoft.VisualBasic.ApplicationServi

Quanti PC nel mondo hanno “a bordo” il framework?

Vi vorrei citare un post di Scott Hanselman in cui vengono dati dei numeri riguardo la diffusione nel mondo del framework .NET: Scott Hanselman's Computer Zen - How many PCs in the world have the .NET Framework installed? I numeri sono decisamente interessanti ma c’è da dire, però, che su Vista e Windows 7, c’è già la versione del framework “di serie”. Technorati Tag: .net framework

Briciole di WPF : Single instance application (soluzione 1).

Coloro che sviluppano in Windows Forms hanno la possibilità di definire, nelle proprietà dell’applicazione, se l’utente può eseguire più istanze della stessa. Nelle applicazioni WPF non esiste questa proprietà: Per poter controllare che la nostra applicazione WPF venga eseguita, al massimo, una sola volta, dobbiamo implementare del codice. La soluzione che propongo in questo post si basa sull’utilizzo di un Mutex di sistema, cioè un oggetto di sincronizzazione che esiste a livello di sistema e che può essere controllato da processi diversi. Quando un’applicazione WPF verrà eseguita, verificheremo la presenza di un Mutex di sistema con un ben determinato nome (quello dell’applicazione che si sta eseguendo): se il mutex non esiste ne creeremo uno e procederemo all’esecuzione dell’applicazione; se il mutex esiste (cioè un’altra applicazione è già in esecuzione) allora chiuderemo l’istanza dell’applicazione. Cominciamo con il definire una function che si occupa di cont

Briciole di WPF : Attached Properties

Le attached properties sono state introdotte con WPF e rappresentano un particolare tipo di proprietà/non proprietà di oggetti WPF. Prendiamo un pezzo di XAML: < Window x : Class ="MainWindow"     xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns : x ="http://schemas.microsoft.com/winfx/2006/xaml"     Title ="MainWindow" Height ="350" Width ="525">      < Grid >          < Grid.RowDefinitions >              < RowDefinition Height ="30"></ RowDefinition >              < RowDefinition Height ="*"></ RowDefinition >              < RowDefinition Height ="30"></ RowDefinition >          </ Grid.RowDefinitions >          < Button Grid.Row ="2" x : Name ="btnPremi"> Premi </ Button >      </ Grid > </ Window > Abbiamo definito una griglia

Briciole di WPF : Proprietà e TypeConverter

Il modo più semplice per assegnare il valore ad una proprietà di un controllo XAML, è quello di valorizzare il corrispondente attributo del tag XML: < TextBlock Background ="Yellow" FontSize ="14"> </ TextBlock > In questo caso impostiamo a giallo il colore di sfondo del TextBlock e il FontSize a 14. Se analizziamo la classe TextBlock possiamo osservare che la proprietà Background è di tipo Brush mentre la proprietà FontSize è di tipo Double. Come fa il parser XAML ad assegnare correttamente gli oggetti alle rispettive proprietà visto che il valore degli attributi è stringa? Per queste operazioni intervengono i TypeConverter la cui classe di base (TypeConverter) esiste fin dalla prima versione del framework ma che trovano larghissimo impiego in WPF. Un Type Converter mette a disposizione dei metodi che consentono di convertire un oggetto in un altro e viceversa. In questo caso, essendo i valori delle proprietà indicati con delle stringhe, i metodi tras

Briciole di WPF: Gerarchia delle classi di WPF

In questo post voglio esaminare la gerarchia delle classi presenti nel framework WPF (almeno per quel che riguarda l’aspetto grafico). La seguente figura mostra il diagramma delle classi delle classi di base: Vediamo le caratteristiche di ogni classe: DispatcherObject : Analogamente a quanto accade per le Windows Forma, anche le applicazioni WPF utilizzano il modello Single-Thread Affinity (STA). Questo significa che i controlli dell’interfaccia utente sono “posseduti” da un solo thread e non è possibile accedere a tali controlli da un altro thread. La gestione di questo modello di threading è demandata ad un oggetto Dispatcher che si occupa di gestire i messaggi di sistema (pressione dei tasti, movimento del mouse, etc., etc.). Gli elementi che derivano da DispatcherObject hanno la capacità di verificare se il codice sta “girando” nel thread corretto o no e di utilizzare il Dispatcher per permette al codice di gestire i controlli nel thrad corretto; DependencyObject : In WPF le prop

DotNetRomacesta - Due free pass per Basta Italia 2010

BASTA!Italia in cooperazione con DotNetRomaCestà mette in palio 2 free pass per l’evento 2010 che si svolgerà a Roma nei giorni 15 e 16 aprile, tra tutti coloro che entro il 20 gennaio manderanno un’e-mail a info@bastaitalia.it con oggetto “Dotnetromacestà” inserendo nel corpo della email il nome, cognome e azienda. L’estrazione avverrà in data 21 gennaio e i fortunati vincitori saranno resi noti sul portale dello User Group romano.   Technorati Tag: BASTA!Italia 2010 , dotNetRomaCestà , community , user group romano

Briciole di WPF: quanto è potente la scheda grafica?

WPF utilizza a pieno le funzionalità delle schede video di nuova generazione. Per fare questo, il framework di WPF assegna un livello di rendering alla scheda grafica che sta utilizzando. Tale valore può assumere tre differenti valori: Livello 0 : la scheda video non dispone di accelerazione grafica. Corrisponde alla versione 7.0 delle API Directx; Livello 1 : La scheda video dispone di accelerazione video parziale. Corrisponde ad una versione delle DirectX tra la 7.0 e la 9.0 (esclusa quest’ultima); Livello 2 : La scheda grafica fornisce piena accelerazione video. Corrisponde alle versioni di DirectX maggiori o uguali a 9.0. E’ possibile recuperare da codice tale valore interrogando il valore della proprietà Tier della classe RenderCapability. Dim renderTier = RenderCapability .Tier >> 16 Select Case renderTier      Case 0          Me .TextBox1.Text = "Nessuna accelerazione grafica"      Case 1          Me .TextBox1.Text = "Par

Complimenti a Matteo per l’MVP!!!

Ero quasi sicuro di scrivere questo post ma, per scaramanzia, non lo avevo detto neanche all’interessato (sia mai avessi portato sfiga). Ora posso complimentarmi alla grande con il mitico Matteo !!! L’MVP te lo meriti senza ombra di dubbio e sono onorato di poter lavorare con te! Quando torni al lavoro, però ti tocca pagare da bere!! :-) Technorati Tag: mvp award , mvp 2010

Buon Anno Nuovo

Un mega augurio di un grandissimo 2010 a tutti i lettori del blog. Speriamo che il nuovo anno sia ricco di soddisfazioni!!