WPF
Windows Presentation Foundation
Una caratteristica di WPF e' l'indipendenza dalla risoluzione, in particolare le immagini bitmap vengono automaticamente ridimensionate a 96 DPI, valore di default storico di Windows.
Un'immagine 512x512 pixel a 72 DPI verra' quindi ridimensionata a 682.5 x 682.5 pixel circa. Questo succedera' indipendentemente dai DPI impostati nel sistema.
Utilizzando software professionali di editing di immagini come Adobe Photoshop, Gimp, etc.. e' possibile salvare i nostri capolavori con una risoluzione DPI specifica. Questa informazione (DpiX e DpiY) non modifica di fatto la dimensione in pixel dell'immagine, ma e' un attributo che viene salvato nei metadati del file e che puo' essere per esempio...
Quando si crea una proprietà di dipendenza non si gestisce direttamente il valore di default ma lo si specifica attraverso i metadati. Se la proprietà è un Reference Type il valore di default viene applicato a tutte le istanze del tipo e non alle singole istanze. Questo comportamento è particolarmente critico quando si lavora con delle collezioni.
Per capire meglio questo comportamento e le sue conseguenze consideriamo una semplice applicazione con una finestra contenente due istanze di un UserControl
L'UserControl (chiamato SampleUserControl) possiede una DependencyProperty con dati di tipo Reference come ad esempio il tipo Person.
Codice dell'UserControl (il...
Il DataBinding in WPF è sicuramente un elemento essenziale ed un primo cittadino ma supponiamo di avere una collezione generica come ObservableCollection<T>, dove T è una nostra classe, per esempio la classica classe Person contenente le proprietà Nome, Cognome e Descrizione: come facciamo a visualizzare tramite XAML nella nostra finestra la descrizione di Mario Rossi?
Diagramma della classe Person
Questo scenario non è direttamente supportato in quanto la sintassi di Binding permette di specificare proprietà, sottoproprietà ed indicizzatori ma non selezionare oggetti in collezioni dato il valore di alcune loro proprietà.
NON è possibile per esempio scrivere, supponendo come contesto...
WPF offre un gran supporto alle applicazioni che vogliono utilizzare animazioni. Tramite poche righe di Xaml possiamo dire agevolmente che vogliamo animare la proprietà di riempimento di un oggetto da un colore ad un altro in un certo periodo di tempo infinite volte utilizzando perfino delle funzioni matematiche per variare non linearmente l'animazione.
Esempio di animazione di un colore in Xaml
Non è però previsto un modo per aggiungere animazioni in maniera sincronizzata a quelle già esecuzione.
Se iniziamo un'animazione che sfuma dal bianco al rosso un ellisse e, supponiamo a metà dell'animazione, vogliamo iniziare un'altra animazione su un altro...
Controlli Panel come Grid, StackPanel, Canvas e DockPanel (ma anche altri) ereditano una serie di eventi del Mouse e della Stilo da UIElement come MouseDown, MouseUp, etc.. che però in genere non ricevono (vengono ricevuti solamente dagli elementi figli tramite il bubbling o il tunneling).
Ad esempio il seguente codice XAML con la relativa funzione
non scatenerà mai l’evento e di conseguenza la MessageBox alla pressione del mouse.
La documentazione della Grid purtroppo non ci è di grande aiuto per risolvere la situazione ma all’interno della documentazione della classe base Panel troviamo la risposta:
Gli elementi Panel non ricevono eventi del mouse o dello...
Aggiornato l’articolo su come creare grafici partendo da zero tramite WPF e LINQ per includere alcune nuove peculiarità del .NET Framework 4.0.
Testo più chiaro con TextOptions.TextFormattingMode="Display"
...
Indice degli articoli su WPF e il 3D Nel precedente articolo abbiamo visto come creare un cubo multi-texture (ovvero con materiali diversi su ogni faccia) utilizzando esclusivamente XAML, il risultato era un codice abbastanza prolisso e poco riutilizzabile. Realizziamo ora un componente che sia semplice da utilizzare, alla fine dovremmo poter scrivere solamente il seguente codice XAML: NB: Per poter aggiungere alle proprietà il supporto al Binding dobbiamo utilizzare nel componente le Dependency Property Il MultiTexturedCube essendo un oggetto 3D per poter essere visualizzato dovrà essere inserito tra i Children (di tipo Visual3D) di un...
I controlli griglia di Windows Forms (DataGridView) e WPF (DataGrid) non permettono di visualizzare “al volo” correttamente insiemi di elementi di tipi come int, float, string, etc.. perché non espongono il loro valore come una proprietà.
Il seguente codice per esempio
int[] myArray = new int[] { 1, 2, 3 };
dataGrid1.ItemsSource = myArray;
mostrerà solamente una griglia con tre righe vuote.
Una lista di elementi di tipo string invece visualizzerà nella griglia solamente le lunghezze delle stringhe ma non il loro contenuto proprio perché la prima proprietà della classe string è Lenght. Molto spesso però la necessità è di visualizzare l’effettivo testo della stringa.
Per...
Indice degli articoli su WPF e il 3D Nel precedente articolo abbiamo visto come colorare un oggetto 3D ed abbiamo trattato le problematiche di mappatura con oggetti 2D chiamati texture. In questo articolo prendiamo invece in considerazione l’applicazione di più materiali, uno per faccia, ad un unico modello 3D: in questo caso un cubo che abbiamo già visto come creare. WPF permette di associare ad ogni GeometryModel3D un solo materiale per la vista frontale ed un solo materiale per la vista di retro, per superare questa limitazione possiamo seguire diverse strade: - Creare una...
In Windows XP esisteva nelle Proprietà della barra delle applicazioni e del menù Start un’opzione chiamata Sempre in primo piano che poteva essere deselezionata e permetteva alle applicazioni massimizzate di poter essere davanti anche alla barra delle applicazioni. Windows Xp Windows 7 In Windows 7...
Full WPF Archive