DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

WPF

There are 17 entries for the tag WPF
[AOP] UI e dintorni con PostSharp

L’AOP ormai sta diventando un paradigma di programmazione sempre più diffuso specialmente nel mondo .NET dove strumenti come PostSharp, DotSpect (Compile-time static injection) e Spring.NET, Castle Windsor, Enterprise Library Policy Injection Application Block (Dynamic Proxy) rendono sempre più semplice la gestione dei “cross-cutting concerns” che provengono dal mondo Object-Oriented. Personalmente sono stato sempre un entusiasta di PostSharp e in questo post vorrei citare un paio di aspect che ho sempre valutato positivamente nella gestione di codice “vicino” alla UI, specialmente nel mondo Windows Forms e WPF. Il primo aspect ha a che vedere con il DataBinding. Sappiamo tutti come implementare l’interfaccia INotifyPropertyChanged...

posted @ domenica 16 ottobre 2011 21:29 | Feedback (0) | Filed Under [ .NET WPF ]

[WPF 4.0] Esportare dati dal controllo DataGrid

Il controllo DataGrid di WPF 4.0 permette di ottenere “gratis” l’esportazione dei dati associati alla griglia in diversi formati tra cui plain text, CSV e HTML. Tale funzionalità è esposta semplicemente tramite l’invocazione del comando Copy sul controllo, che trasferisce nella Clipboard i dati contenuti nelle ...

posted @ martedì 16 novembre 2010 00:40 | Feedback (0) | Filed Under [ WPF ]

[WPF] TextBox e input filtering

Quando si realizza un’interfaccia grafica per l’inserimento dati, è sempre buona prassi prevedere una prima "validazione" dell'input utente. Una tecnica molto semplice per raggiungere tale obiettivo potrebbe basarsi sull’idea di filtrare l’input in modo da non permettere l’inserimento di caratteri non validi. Nel caso della TextBox, in particolare, si potrebbe pensare di estendere il controllo affinché il filtraggio avvenga a fronte di un matching con un generica espressione regolare… una RegexTextBox dunque :). public class RegexTextBox : System.Windows.Controls.TextBox{                  public string Pattern { get; set; }   public RegexTextBox()  {     CommandBinding pasteCommandBinding = new CommandBinding(ApplicationCommands.Paste);     pasteCommandBinding.CanExecute += delegate(object sender, CanExecuteRoutedEventArgs e)      {        e.Handled...

posted @ martedì 7 settembre 2010 22:13 | Feedback (0) | Filed Under [ WPF ]

[WPF] Evidenziare testo in una RichTextBox

Una funzionalità fondamentale per text-editor/reader è l’evidenziazione programmatica di testo, magari utilizzando stili di formattazione diversi. In questo post vorrei mostrare una possibile implementazione di tale funzionalità utilizzando il controllo RichTextBox di WPF. Immaginando un approccio top-down, potremmo partire da un metodo HilightText(…), il cui compito sia proprio quello di evidenziare del testo all’interno di una RichTextBox. public void HilightText(string pattern) {                List<TextRange> ranges = GetMatchingTextRanges(pattern);   foreach (TextRange textRange in ranges) HilightTextRange(textRange, Brushes.Black, Brushes.Yellow);             } L’idea è quella di applicare un background giallo ed un foreground nero a tutti gli intervalli di testo (TextRange) che soddisfano...

posted @ martedì 24 agosto 2010 23:01 | Feedback (1) | Filed Under [ WPF ]

[WPF] MVVM e Splash Screen

Durante lo sviluppo di applicazioni WPF di una certa “pesantezza”, può essere utile ricorrere a Splash Screen aggiornabili in tempo reale che notifichino all’utente lo stato di avanzamento del caricamento dei vari moduli, ad esempio tramite elementi di testo piuttosto che barre di progresso. A volte, infatti, può non essere sufficiente una semplice immagine impostabile tramite la Build Action "SplashScreen" di Visual Studio. In questo post vorrei quindi mostrare una possibile implementazione di uno Splash Screen aggiornabile in tempo reale usando il pattern MVVM.  Per semplificare, supponiamo di posizionare nel Main la pesantissima sequenza di caricamento della nostra applicazione: public static class Program {...

posted @ domenica 30 maggio 2010 22:36 | Feedback (3) | Filed Under [ WPF ]

[WPF] Ereditare controlli da classi generiche

In applicazioni WPF di una certa complessità è molto facile trovarsi in situazioni in cui è utile sfruttare classi base per i controlli (es. UserControl e Window). In architetture MVVM, ad esempio, è possibile far ereditare i vari controlli da classi base generiche. Tuttavia, l’ implementazione dell’ereditarietà generica in WPF talvolta non è proprio immediata, soprattutto perché non sempre gli errori di build sono esplicativi.  In questo semplicissimo esempio di MVVM viene mostrato come si può specificare la classe base generica di una Window direttamente nello XAML. Partiamo dalla Window: public partial class CustomersWindow : WindowBase<CustomersViewModel> {          public CustomersWindow() : base(new CustomersViewModel())...

posted @ lunedì 29 marzo 2010 14:48 | Feedback (2) | Filed Under [ WPF ]

[WPF] Un “generic” command

Analizzando diverse soluzioni WPF che sfruttano l’architettura M-V-VM, mi è saltata all’occhio una strategia di implementazione dell’interfaccia ICommand semplice e potente a mio modo di vedere. Andiamo direttamente al codice: public class GenericCommand<T> : ICommand {   public Predicate<T> CanExecuteDelegate { get; set; }   public Action<T> ExecuteDelegate { get; set; }          public bool CanExecute(object parameter)   {     if (CanExecuteDelegate...

posted @ sabato 17 ottobre 2009 12:41 | Feedback (0) | Filed Under [ WPF ]

[WPF] Window non rettangolari

La possibilità di creare Window di forma irregolare costituisce a mio modo di vedere uno dei più divertenti nonché semplici vantaggi di WPF. In genere, ogni tecnica di realizzazione di Window dalla forma completamente personalizzata si basa sulla valorizzazione preliminare di tre proprietà: Window.AllowsTransparency = True Window.WindowStyle = None Window.Background = Transparent In questo modo siamo subito svincolati sia dalla forma rettangolare standard della nostra Window, che dalla barra standard del titolo. Si aprono quindi diverse possibilità di sviluppo. E’ possibile ad...

posted @ sabato 26 settembre 2009 14:23 | Feedback (0) | Filed Under [ WPF ]

Screenshots di Forms, Windows e schermo

Spesso in ambiente desktop può essere utile salvare degli screenshot relativi alla UI della nostra applicazione: in alcuni scenari ad esempio, oltre ai soliti log e trace, è molto comodo avere automaticamente lo screenshot dell’UI al momento dell’errore, magari come allegato di una email di report. Una comune soluzione in Windows Forms è quella che sfrutta GDI+ tramite il metodo Graphics.CopyFromScreen(…) . In questo post vorrei mostrare come anche in WPF è possibile approfittare della stessa tecnica con il minimo sforzo: in particolare, nell’ helper class che segue sono presenti degli overload del metodo SaveScreenShot(…) per salvare...

posted @ mercoledì 9 settembre 2009 00:29 | Feedback (0) | Filed Under [ WPF ]

[WPF] Application Shutdown

In un’ applicazione WPF, per default la classe Application mantiene viva l’applicazione stessa finché almeno una finestra è ancora aperta. Se si vuole cambiare questo comportamento, è possibile utilizzare la proprietà Application.ShutdownMode direttamente dal markup XAML: ( ATTENZIONE: se si istanzia l’oggetto Application a mano, è obbligatorio impostare la proprietà ShutdownMode prima di invocare il metodo Run() ) I valori ammissibili per tale proprietà sono: OnLastWindowClose (default): l’applicazione WPF rimane in vita fintantoché esiste almeno una Window attiva....

posted @ mercoledì 26 agosto 2009 15:08 | Feedback (0) | Filed Under [ WPF ]

[WPF] ICommand e CanExecute

Per chi sviluppa utilizzando il pattern M-V-VM l’interfaccia ICommand costituisce la base per costruire un’infrastruttura che permetta alla View di invocare comandi applicativi direttamente nel ViewModel. L’interfaccia mette a disposizione tre semplici membri: due metodi Execute(...), CanExecute(...) ed un evento CanExecuteChanged. E’ facile immaginare come in progetti di una certa consistenza sia necessario costruirsi delle implementazioni spesso particolari dell’interfaccia ICommand, cosa che da una parte implica tanta buona volontà, dall’altra ripaga quando si dormono sonni tranquilli pensando ad una View completamente svincolata dalla logica applicativa. In genere un’ utile implementazione di ICommand poggia sull’ intercettazione dell’evento CanExecuteChanged...

posted @ giovedì 2 aprile 2009 21:18 | Feedback (0) | Filed Under [ WPF ]

[Silverlight/WPF] Resource file e Access Modifier

Più volte nello sviluppo Silverlight/WPF mi sono imbattuto nella necessità di utilizzare i file di risorsa (.resx) e devo dire che le prime volte mi sono trovato un po’ in difficoltà dal momento che non riuscivo a capire per quale arcano i miei binding dichiarativi nel codice XAML verso le mie risorse non funzionassero affatto. Andiamo per ordine: supponendo di definire un file di risorsa in questo modo ...   ... in fase di design Visual Studio notifica uno “strano” errore,   indipendentemente dal fatto che...

posted @ venerdì 20 marzo 2009 00:02 | Feedback (0) | Filed Under [ WPF Silverlight ]

Da WindowsForms a WPF via MVP

Qualche giorno fa mi sono imbattutto in una simpatica applicazione Windows Forms che permette di disegnare su una lavangna virtuale il posizionamento in campo di due squadre di calcio. Un'applicazione per allenatori insomma :D. In breve, il funzionamento è semplicemente basato sull'aggiunta e sullo spostamento di pedine (rosse o blu) su un campo di calcio virtuale con eventuale possibilità di ingrandirne/rimpicciolirne le dimensioni. Guardando il sorgente ho osservato come l’intera applicazione fosse stata concepita e sviluppata "alla Windows Forms" con l'intera logica piazzata all'interno di ciascun event handler dei vari elementi dell'UI. Ho...

posted @ venerdì 27 febbraio 2009 20:43 | Feedback (1) | Filed Under [ WPF ]

TestApi e Input Injection

(@ Matteo: della serie "Tu m'hai provocato...") Appena uscito su CodePlex, TestApi 0.1 sembra costituire uno strumento veramente potente per il testing automatico dell'UI di applicazioni WPF, Windows Forms e Win32. La parte che più mi ha affascinato sin da subito è l'UI testing tramite Input Injection (simulazione dell'input utente).  In merito a questo aspetto, questa libreria fornisce due tipologie di facilitazioni per le classiche tecniche di "input simulation": Invocazione programmatica degli eventi dell'UI utilizzando i metodi degli AutomationElement Interazione con i sistemi di...

posted @ mercoledì 17 dicembre 2008 01:15 | Feedback (3) |

[WPF] Creare un ColorPicker

In generale, una semplice soluzione per realizzare un ColorPicker si basa sull'utilizzo di un' immagine che rappresenta lo spettro dei colori, come la seguente: Dopodiché, per rilevare il colore selezionato al passaggio del Mouse abbiamo ovviamente bisogno di conoscere le coordinate del cursore su tale immagine. In WPF questa operazione è veramente molto semplice sfruttando la classe CroppedBitmap. Se definissimo una BitmapSource come Source della nostra Image WPF, ecco come potremmo implementare un semplice metodo per individuare il colore RGB corrispondente alle coordinate del...

posted @ venerdì 5 dicembre 2008 20:59 | Feedback (0) | Filed Under [ WPF ]

[WPF] PropertyGrid su CodePlex

Stavo cercando un controllo PropertyGrid per WPF ed in men che non si dica ecco che esce fuori su codeplex: WPF PropertyGrid Control Forte!!! Come si può notare è molto simile al property editor di Expression Blend, anche se lo scopo del progetto è: The purpose of this project not to clone existing Microsoft Expression Blend property editor or Visual Studio 2008 property pad for "Cider" WPF designer but rather introducing a scalable and comprehensive control ready to be used in different types of applications Credo sarà interessante dare un'occhiata al sorgente :D P.S.: Se qualcuno di voi già lo conosce/utilizza mi piacerebbe avere qualche...

posted @ mercoledì 3 dicembre 2008 10:37 | Feedback (0) | Filed Under [ WPF ]

[WPF] Considerazioni su M-V-VM

In questi giorni sto studiando a fondo il pattern M-V-VM ((Data)Model-View-ViewModel), visto che quando fu introdotto per la prima volta (ormai 3 anni fa) non lo valutai affatto positivamente poiché ero convinto che avrebbe "sporcato" troppo il pattern MVC, creando confusione sia tra gli sviluppatori che tra gli architects. Questo pattern fu coniato nel 2005 da John Gossman mentre WPF vedeva la luce (Avalon). In uno dei suoi post a riguardo, Gossman lo definì nella seguente maniera: Model/View/ViewModel is a variation of Model/View/Controller (MVC) that is tailored for modern UI development platforms where the...

posted @ domenica 30 novembre 2008 17:22 | Feedback (3) | Filed Under [ WPF ]

Powered by:
Powered By Subtext Powered By ASP.NET