WPF
There are 74 entries for the tag
WPF
Una delle prime regole quando si lavora con WPF/SL/WP7 è organizzare le risorse in modo tale che sia immediato capire dove si trovano gli stili,templates e brushes. Forti di questa convizione, con Blend la cosa è spaventosamente semplice supponiamo di voler definire il colore di sfondo di un Border: Trasciniamo il Border nell’artboard e, col border selezionato, usiamo il menu Object->Edit Style->Create Empty Rispettando l’esigenza di organizzazione delle risorse, indichiamo a Blend di memorizzare lo style in un nuovo ResourceDictionary Styles.xaml: Fatto questo, all’interno della definizione dello Style cambiamo il colore...
Visto che ultimamente parecchi miei posts sono dedicati a Blend e avendo “twettato” “Not using Expression Blend? you’re out of business”, un paio di persone mi hanno chiesto: “Ma sei diventato un designer?”, la risposta è ovviamente “No”, essere un designer richiede estro e creatività, doti che personalmente ritengo innate e che purtroppo so di non possedere. Il motivo del mio tweet è semplicemente dovuto al fatto che, anche alla luce di ciò che la versione 4.0 permette di fare, ritengo semplicemente che non usare Blend per sviluppare applicazioni WPF/Silverlight e Window Phone 7 sia semplicemente...
Cosa vi piacerebbe avere nella prossima versione di WPF? dite la vostra votando qui: http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions Visto che la stessa cosa è stata fatta con Silverlight 4.0 e gran parte delle richieste è stata soddisfatta vale la pena votare. Technorati Tags: WPF,User Voice
Se sviluppate un applicazione WPF 4.0 e utilizzate Blend preview for .NET 4.0 per disegnare la UI fate attenzione che se utilizzate Font Embedding (vedi immagine) la vostra applicazione diventa dipendente dall’ SDK di Blend a causa di questa righe inserita nel file di progetto <Import Project="$(MSBuildExtensionsPath)\Microsoft\Expression\Blend\3.0\WPF\Microsoft.Expression.Blend.WPF.targets" /> e di conseguenza il progetto non verrà caricato in assenza dell’installazione di Blend. Poco male, basta saperlo… Technorati Tags: WPF,Blend
Prendiamo uno UserControl che contiene una semplice listbox: 1: <Grid>
2: <ListBox HorizontalAlignment="Stretch"
3: Name="listBox1"
4: ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl},Path=MyValues}"
5: ...
Piccolo trick per impostare l’elemento che deve avere il focus quando viene visualizzata una finestra…, non funziona in tutti i contesti ma può sempre venire utile… 1: <Window x:Class="D01_MovieCatalog.Views.CatalogView"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: Title="CatalogView"
5: ...
Quando si utilizza un custom ErrorTemplate per segnalare eventuali errori di validazione bisogna tenere in considerazione alcuni effetti secondari derivanti dal suo utilizzo. Consideriamo il caso più semplice: Una textbox bindata ad una proprietà di un ViewModel che implementa IDataErrorInfo la cui parte di validazione è la seguente: 1: #region IDataErrorInfo Members
2:
3: public string Error
4: {
5:...
Quando si realizzano dei controlli WPF e/o Silverlight, il loro comportamento a design time è tanto importante quanto quello a runtime, a questo link trovate tutte le informazioni per gestire al meglio l’integrazione dei vostri controlli all’interno di Visual Studio e Expression Blend. Technorati Tags: WPF,Silverlight,Design Mode
In WPF la localizzazione è ‘ufficialmente’ compito di LocBaml, tool che personalmente preferisco evitare per una lunga serie di motivi, non ultima il fatto che la non è applicabile a Silverlight. Per localizzare le applicazioni basate sul pattern Model-View-ViewModel la soluzione che utilizzo è la seguente. Aggiungo al mio progetto i vari files .resX che contengono i vari testi localizzati: ...
Nella lista dei WPF Disciples si è discusso di come determinare in maniera corretta la modalità Design Mode, ovvero quando il codice sta girando nel contesto di un desginer. Le risposte sono: WPF 1: public static class Designer
2: {
3: private static readonly bool isDesignMode;
4:
5: public static bool IsDesignMode {get { return...
Parlando di M-V-VM ho notato che, appena appresi i concetti base, la prima domanda che scaturisce è: “Ok, ma come faccio a far comunicare tra loro i diversi ViewModels?”. Vediamo di realizzare un semplice esempio basato sul M-V-VM Light toolkit che mostra una finestra con una lista di prodotti e un altra finestra contente i dettagli del prodotto selezionato, La struttura dell’applicazione è molto semplice Alla finestra principale...
Una semplice richiesta da parte di un cliente di Managed Designs relativamente ad una applicazione WPF che deve visualizzare degli elementi in posizioni ben precise ed eseguire delle operazioni in base agli items selezionati ha dato origine a questo post, il cui scopo è quello di mostrare come sia fondamentale cambiare il modo di pensare ad una interfaccia WPF/Silverlight rispetto alla vecchia tecnologia Windows Forms.
Il cliente aveva sviluppato l’idea aggiungendo e posizionando dinamicamente gli elementi ad un Canvas per poi rendersi conto durante lo sviluppo che la soluzione utilizzata portava ad un vicolo cieco.
La soluzione che abbiamo proposto...
Essendo una domanda ricorrente credo sia il caso di bloggarla: “Se il mio ViewModel espone una proprietà enumerativa, come posso bindarla ad un insieme di radio buttons ?”. La risposta sta nell’utilizzo di un converter. Partiamo dal ViewModel: 1: public enum Power {Low,Medium,High}
2:
3: public class TheViewModel
4: {...
Quando in una settimana due persone pongono lo stesso quesito è sintomo che quel particolare concetto non è ben chiaro o semplicemente non è stato spiegato correttamente. La domanda è: “Usando Model View ViewModel voglio creare una listbox con i vari elementi e un pulsante che mi permetta di cancellare quel determinato elemento” in pratica qualcosa tipo: Normalmente il ViewModel che viene associato alla Window espone il comando di cancellazione della persona e la collezione di elementi da elencare, in breve qualcosa tipo: 1:...
Un interessante whitepaper riguardante tutto quello che c’è da sapere sulla localizzazione in WPF: http://wpflocalization.codeplex.com Technorati Tags: WPF,WPF Localization
Volete tutta la documentazione MSDN relativa a WPF aggiornata alla 4.0 Beta1 in un unico file chm? La trovate qui: http://cospire.com/wpf_docs.zip (108 MB) Technorati Tags: WPF,WPF4 Offline documentation
Visto il grande interesse che il pattern Model-View-Viewmodel sta (meritatamente) riscuotendo nelle communities WPF/Silverlight era inevitabile che qualcuno iniziasse a raggrupparne i blocchi fondamentali in frameworks/libraries/templates affinchè non sia necessario reinventare la ruota tutte le volte.
Tra le svariate implementazioni che ho visto nascere in questi mesi a parer mio le due più' interessanti sono:
Onyx www.codeplex.com/wpfonyx
Julmar Helper Library www.julmar.com/blog/mark/PermaLink,guid,8b3e4279-70a5-431e-8fa3-4c1e047df311.aspx
Quest'ultima e' la mia preferita ed e', oltre che una library fondamentale per M-V-VM, una raccolta infinita di tips and trick...
Tamir ha finalmente rivelato il suo progetto segreto: Simply amazing! FYI: Il tutto gira su un netbook con un Windows XP tailorizzato che ‘bootta’ più velocemente di un Nokia E71. Technorati Tags: WPF
Sul sito MSDN Italia è stato appena pubblicato un percorso formativo dedicato a Windows Presentation Foundation (WPF)interamente in Italiano. Visto che conosco chi li ha preparati vi posso anticipare che sono praticamente slide-less (solo dove proprio non se ne può fare a meno…) e molto demo oriented (robaccia tipo Visual Studio 2008 e Expression Blend per intenderci… ) Si parte da una overview per chi non ha mai visto WPF fino ad un webcast interamente dedicato a Model-View-ViewModel passando per argomenti quali Layouting, Commanding,Styling e Templating e ovviamente,...
Seguaci del pattern M-V-VM Unitevi! (ma durante le ferie sparpagliatevi… ) Josh Smith, tra le persone più preparate su WPF che conosco, ha pubblicato su MSDN un articolo capolavoro su M-V-VM che non dovete assolutamente perdervi. Il fatto che ormai sempre più: WPF=M-V-VM, spero convinca anche i più scettici che, a meno che non vogliate farvi del male da soli, Model View ViewModel è ormai di fatto la modalità ufficiale di progettazione di applicazioni basate su WPF (e aggiungo anche Silverlight in quanto, anche se con qualche sforzo in più, è comunque applicabile anche in...
A quanto pare anche il mondo Java si sta interessando a WPF… Fonte: eFace Technorati Tags: WPF,eFace
Nuova patch per il WPF designer integrato in VS2008 SP1 •WPF Designer Crashes VS when updating a resource in an external resource dictionary •Readonly attached collection properties (e.g. VisualStateManager.VisualStateGroups) do not load in WPF designer •WPF designer reports Error if users/codes set a databinding locally in a control and then clear that value •WPF Designer fails to load in VS.NET 2008 SP1 (RTM) for solution containing a .NET 3.0 WPF application project •Visual Studio crashes when you...
Siete interessati ai WPF Pixel Shaders introdotti col recente SP1? allora non perdetevi questa utility: Shazzam Technorati Tags: WPF,Pixel Shaders,Shazzam
Una delle principali difficoltà nel passare dai Windows Forms a WPF è sicuramente quella di affrontare gli stessi problemi in maniera completamente diversa da come sono stati affrontati in passato, in pratica lo stesso problema di chi, dopo anni di VB6 decide di passare a VB 2008. Tra le tecniche che, lentamente, stanno ottenendo parecchio successo tra gli sviluppatori WPF c’è sicuramente l' "Attached Behavior" ovvero il racchiudere in una classe esterna una o più funzionalità applicabili in base alla necessità ai vari elementi che compongono una UI WPF. Consideriamo un caso tanto semplice, quanto...
Per gli sviluppatori WPF le novità non finisono col SP1: entro fine anno ci sarà un nuovo “rilascio” che conterrà nuovi controlli, tra questi la tanto attesa Datagrid. Se avete il SP1 installato potete comunque utilizzarla sin da ora usando la versione CTP disponibile qui. Technorati Tags: WPF,WPF Datagrid
Non è un segreto che nella prossima release di WPF troveremo il supporto al VisualStateManager (già presente in Silverlight), nel caso vogliate un anteprima con relativo codice, cliccate qui. Inizialmente ero molto scettico sull’utilizzo di VisualStateManager rispetto ai Triggers (che spero comunque facciano il loro ingresso nella prossima versione di Silverlight) ma devo ammettere che l’utilizzo semplifica notevolmente la gestione dello stato di uno o più elementi. Technorati Tags: WPF,VisualStateManager
Posto qui la risposta al post di Igor cosicchè possa essere utile anche ad altri… Problema: Volendo definire un DataTemplateSelector e relativi DataTemplates in una class library, come risalgo ai DataTemplates definiti nel ResourceDictionary contenuto nella stessa assembly?. Quando si usa XAML spesso ci si dimentica che si ha a che fare con una classe parziale e che quindi è possibile aggiungere del codice semplicemente usando la direttiva x:Class, questo significa che riscrivendo il classico ResourceDictionary in questo modo: MyRd.xaml <ResourceDictionary
...
Ieri al termine della mia sessione ai Community Days 2008 Nicolò ha proposto un “intrigante” quesito: In breve: l’obiettivo è quello di cambiare il colore di sfondo di alcune labels in base al testo inserito in una textbox, gestendo il tutto all’interno di un unico style implicito condiviso da tutte le labels. Alla fine, ragionandoci un attimo, sono giunto a questa soluzione che aggira l’impossibilità di usare binding sulla proprietà Value della classe DataTrigger usando un MultiTrigger alimentato con: il valore contenuto della textbox. Il valore della...
Se in un applicazionew Windows Forms scrivo una cosa del genere: public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DateTime dt = new DateTime(2008, 07, 06);
label1.DataBindings.Add(new Binding("Text", dt, null));
}
}
ottengo come risultato una label che contenente: “06/07/2008 00:00:00”
Proviamo ora l’equivalente WPF ovvero:
<Window x:Class="WpfApplication4.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBlock...
Il recente rilascio del service pack 1 di Visual Studio 2008 e del .NET Framework 3.5 introduce parecchie novità per lo sviluppatore WPF, ecco le principali partendo da quelle più evidenti, ovvero quelle inerenti il WPF designer integrato in VS 2008 (a.k.a Cider). Gestione degli eventi Le novità più evidenti sono visibili nella finestra delle proprietà (fig.1) dove finalmente è stata introdotta la possibilità di gestire gli eventi dei controlli secondo la stessa modalità delle applicazioni Winform (fig.2) La vecchia modalità che...
Su Codeplex è apparso un interessante progetto chiamato Transitionals. Il progetto consiste in una libreria che permette di applicare degli effetti di transizione da uno usercontrol all'altro il tutto semplicemente modificando il valore della proprietà Content dell'oggetto contenitore TransitionElement. Ecco un esempio di utilizzo: <Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:Transitions"
xmlns:transc="clr-namespace:Transitionals.Controls;assembly=Transitionals"
xmlns:transt="clr-namespace:Transitionals.Transitions;assembly=Transitionals"
x:Class="Transitions.Window1"
x:Name="Window"
Title="Transitions"
Width="640" Height="480">
<Window.Resources>
...
Posto qui una versione alternativa al recente post di Igor a dimostrazione che XAML può evitare l'uso del codice,a beneficio di chi non legge i commenti nei blogs... <Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication9.Window1"
x:Name="Window"
Title="Window1"
Width="640" Height="480">
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard Name="MyStoryboard">
...
Capire perchè un binding non funziona come dovrebbe in WPF non è molto semplice, immaginiamo questa semplice situazione: XAML <Window x:Class="WPF_Databind.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox
Text="{Binding Path=CustomerName}"
Height="23" Margin="87,65,71,0" Name="textBox1" VerticalAlignment="Top" />
</Grid>
</Window>
Codice
namespace WPF_Databind
{
public partial class Window1 : Window
...
Su Codeplex è presente una libreria FluidKit per WPF che offre un interessante suite di controlli: ImageButton DragDropManager GlassWindow BalloonDecorator ItemSkimmingPanel + SkimmingContextAdorner PennerDoubleAnimation ElementFlow ( New ) Tra questi quello più spettacolare è sicuramente ElementFlow che permette di visualizzare il contenuto di un ItemsControl in diverse modalità Carousel Like. La libreria è distribuita come codice sorgente e dovete compilarla sulla vostra...
Spulciando la documentazione di Silverlight 2.0 ho notato una diversa gestione dei routed events rispetto a WPF che in alcuni casi può modificare il comportamento finale di un applicazione.
Partiamo da questo XAML scritto per WPF:
<Window x:Class="WPF_RoutedEvents.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF routed events" Height="288" Width="473">
<Grid MouseLeftButtonDown="Grid_MouseDown">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" MouseLeftButtonDown="StackPanel_MouseDown">
<Image HorizontalAlignment="Center" Source="BMP.png" Height="75" />
<Image HorizontalAlignment="Center" Source="JPG.png" Height="75"...
Domenica mattina, giornata uggiosa..., quasi quasi mi faccio un Adorner. L'idea è quella di realizzare una demo che mostri come aggiungere delle informazioni di selezione (tipo designer) attorno al controllo che ha il focus e l'utilizzare un Adorner è sicuramente la soluzione migliore in quanto è un elemento associato a un UIElement che può renderizzare del contenuto in un layer che sta "sopra" lo UIElement associato, di fatto arricchendolo. Step 1: Create l'adorner ereditando dalla classe Adorner class MyAdorner:Adorner
{
/// <summary>
...
Se avete letto questo blog di ScottGu (che ultimamente ha più "ascolti" del Festival di SanRemo) noterete come il data model generi dei dati dummy a design time usando: if (HtmlPage.IsEnabled==false){...} Ma qual'è l'equivalente in "Full WPF"? Voilà! if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
LoadDummyData();
}
Lo è quello di avere dei dati fittizi da utilizzare per disegnare il relativo DataTemplate, peccato che Expression Blend si ostini a creare un ObjectDataProvider alla faccia di tutti i vari pattern MVC/MVP...
Technorati Tags:...
Leggendo il minicorso di ScottGu non ho potuto fare a meno di notare come SilverLight 2.0 nasca già con dei controlli che tutt'ora mancano in WPF come, ad esempio, la WatermarkedTextBox. Ho deciso quindi di crearmi un alternativa per full WPF.
Ho creato un controllo WatermakedTextBox ereditando da TextBox e aggiungendo una DependencyProperty Watermark
public class WatermarkedTextBox:TextBox
{
#region Watermark
/// <summary>
/// Watermark Dependency Property
/// </summary>
public static readonly DependencyProperty WatermarkProperty =
DependencyProperty.Register("Watermark",...
Dopo avere installato il SP1 di Vista mi sono ritrovato con lo stesso problema di rendering che avevo riscontrato dopo l'installazione dell'hotfix KB 938660, ai tempi velocemente risolto rimuovendolo. Il problema è legato alla non corretta gestione delle trasparenze e si traduce in un antiestetica barra verticale nera al posto della solita ombra verticale. Dopo aver girovagato per la rete (Connect incluso) in cerca di supporto ho provato a "giocare" con il pannello di controllo della mia scheda grafica NVidia e alla fine ho trovato l'opzione "incriminata" In questa posizione...
Continuo a pensare che il designer di WPF di VS2008 sia una delle note più dolenti di questo rilascio... Creo un nuovo progetto WPF Aggiungo un nuovo UserControl Inserisco, a manina, lo UserControl appena creato in Window1. (A manina perchè non è disponibile nella toolbox) Assegno, via PropertyGrid, un nome allo UserControl Compilo... Anzi No!, non compila! Questo lo Xaml... <Window x:Class="D00_Usercontrol.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:D00_Usercontrol"
Title="Window1" Height="356" Width="574" MouseDown="Window_MouseDown">
...
E' stata rilasciato un aggiornamento (KB938660) che "dovrebbe" (il condizionale è ormai d'obbligo) migliorare le prestazioni delle applicazioni WPF, in particolar modo quelle legate alle layered Windows dove è possibile raggiungere un miglioramento del 400%. L' hotfix è disponibile qui. Technorati Tags: WPF,Performances
Quando si crea un custom control è possibile far si che il look dello stesso di adatti al tema di Windows attualmente selezionato, per far questo esiste un apposita procedura che, brevemente, consiste nel creare in un folder chiamato Themes una serie di ResourceDictionaries con dei nomi ben precisi (ad esempio in Vista il nome è Aero.NormalColor.Xaml) contenenti le risorse da applicare tema per tema al nostro controllo.Affinchè il tutto funzioni è necessario modificare il file app.config e indicare a WPF dove cercare le risorse per il tema attualmente selezionato.[assembly: ThemeInfo(
ResourceDictionaryLocation.SourceAssembly, //where...
E chi l'ha detto che sviluppare un applicazione enterprise usando WPF non dà nessun valore aggiunto? Probabilmente quelli che non conoscendo una tecnologia la sconsigliano e che probabilmente sono gli stessi che dicono che Windows Vista non è ancora stabile e quindi meglio installare XP oppure NT4. Beh, io sono convinto che un applicazione come "Lawson Smart Client" sviluppata da Frog design, rispetto alla "classica" applicazione Windows Forms, può decisamente fare la differenza. Fonte: http://www.istartedsomething.com/20080109/frog-design-wpf-sexy-enterprise-software/ Technorati Tags: WPF,Enterprise Applications,Frog Design
Pistachio è un utility sviluppata da Grant Hinkson di Infragistics che, fornito in ingresso un progetto WPF, elenca tutte le resorse e il punto dove queste sono utilizzate. Utile per determinare la presenza di risorse non più utilizzate è carino anche dal punto di vista grafico. Ho riscontrato un paio di problemi/limitazioni: -Non gestisce progetti VB (vabbè è un utility...) -Una volta cliccato sulla selezione del progetto non è possibile annullare ...
XAMLPad è il "Notepad" di chi usa WPF. Ammetto di non averlo mai usato molto perchè ho sempre preferito la sua evoluzione XAMLPadX , ma ora che è uscita la versione 1.0 di Kaxaml credo che quest'ultimo diventerà il mio WPF quick editor di fiducia Technorati Tags: WPF,XAMLPad,XAMLPadX,Kaxaml
Implementare INotifyPropertyChanged non solo permette ad eventuali controlli WPF connessi ad una fonte dati di aggiornarsi quando il dato cambia ma evita anche che in alcune particolari situazioni il binding dia luogo a dei memory leaks. Il tutto è spiegato dettagliatamente in questa KB. Technorati Tags: WPF,WPF DataBinding
Di materiale in rete su WPF c’è né parecchio, faccio però fatica a trovare materiale riguardante un aspetto cruciale nelle realizzazione di una qualsiasi applicazione WPF: l’organizzazione delle risorse, dove col il termine risorse mi riferisco a qualsiasi cosa possa essere contenuta in un ResourceDictionary. Immaginiamo,ad esempio,di dovere visualizzare un immagine e utilizzare uno stile in una finestra con la possibilità di sostituirli successivamente senza modifica l’applicazione principale. Forti dell’esperienza maturata coi Windows Forms anche chi è digiuno di WPF può facilmente intuire che la soluzione consiste nel mettere immagine e stile in...
Finalmente qualcuno ha colmato una grande lacuna presente in WPF creando una serie di snippets che rendono meno noiosa la creazione di dependency properties, routed commands e routed events. Gli snippets sono ben organizzati e coprono tutte le varie possibili alternative, personalmente qualcuno me lo ero già creato ma questi sono decisamente meglio. Finalmente e complimenti a Dr. WPF! Technorati Tags: WPF,WPF Snippets
Karl del team di Mole mi segnala la disponibilità di una nuova release che da ora può essere utile anche a chi non usa WPF. Non avendo capito esattamente quale fosse il valore aggiunto per i non-WPF developers ho chiesto ulteriori dettagli e questa è la sua risposta: 1. Viewing collection data in Mole is MUCH easier than in Visual Studio. You also get two views for the same data. There are two examples of viewing collection data in the Code Project article. 2. Mole allows establishing Favorites to make...
Ammetto che mi ero quasi scordato che Chris mi aveva inviato una copia della nuova versione del suo libro su WPF, meglio così, trovare il pacco questa sera è stata una piacevole sorpresa. La prima edizione è stato il mio primo libro su WPF, ricordo ancora la ressa a PDC 2005 per acquistarlo e ammetto che, malgrado datato, alcune volte trovo ancora dei dettagli non citati in altri libri. Ho dato un occhiata veloce per vedere il livello di questa nuova versione di ben 832 pagine contro le 430 della precedente, e devo dire ho...
Con l'avvento di WPF si tende sempre di più a descrivere il ruolo del "designer" come quello di colui che si occuperà della user interface. La mia esperienza sembra confermare che, almeno inizialmente, questo ruolo verrà comunque comperto da un developer (magari quello col migliore senso estetico) ma non è escluso che in futuro, i ruoli diverrano ben definiti e coperti da diverse professionalità. Fin'ora, a parte la definizione dei ruoli, non si è mai visto come le due figure devono/possono interagire tra loro, e come un applicazione WPF debba essere realizzata affinchè questo sia realizzabile nel migliore...
E disponibile la December preview di Expression Blend 2, scaricabile qui. Technorati Tags: WPF,Expression Blend
Pochi giorni fa segnalavo questo visualizer per WPF, il team è in realtà iper-attivo e ha già rilasciato la release successiva: Mole II. Più sobrio rispetto al precedente e sopratutto: molto più veloce! Technorati Tags: WPF,Visualizer
Non sono un grande sostenitore delle animazioni di WPF (a parte le demo ovviamente, il pulsante che ruota è ormai un classico...) però in alcuni casi le animazioni possono dare un tocco di "eleganza" anche alla più statica delle applicazioni. Il frammento di codice che segue anima la proprietà StrokeDashOffset di un rettangolo racchiuso in un template associato attraverso FocusVisualStyle ottenendo l'effetto della classica linea animata che circonda il controllo col focus. <Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="FocusVisualStyle.Window1"
x:Name="Window"
...
Ricciolo questa volta si è superato, non solo si è messo ad analizzare lo spettro di un segnale audio con DirectShow, ma si è pure inventato un player WPF con relativi VU-Meter usando una tecnica da applauso. Attendiamo un articolo approfondito sull'intero progetto Technorati Tags: WPF,DirectShow
E' uscita la versione di Expression Blend compatibile con la versione RTM del Fx 3.5 e Visual Studio 2008. Questo Sp1 migliora la stabilità e la velocità nell'editing delle risorse. Disponibile qui Technorati Tags: Expression Blend,WPF
Localizzare un applicazione WPF rappresenta sotto certi aspetti un salto nel passato. Dopo esserci abituati a Visual Studio e alla possibilità di localizzare un form semplicemente cambiando la proprietà Language, ora il gioco si fa decisamente più "duro".
Innanzitutto bisogna procurarsi i ferri del mestiere quindi oltre a Visual Studio 2008 bisogna scaricarsi l'esempio LocBaml (per la serie "fatelo da voi"...) e compilarselo.
A questo punto immaginiamo di avere un applicazione come quella in fig1 composta da una finestra con all'interno un semplice pulsante che quando premuto visualizza una MessageBox
fig.1
Il punto di partenza è modificare il file .csproj...
Immaginate di avere la necessità di eseguire un operazione ogni volta che l'utente preme un qualsiasi pulsante all'interno di un applicazione. Far questo in un applicazione Windows Form non è sicuramente banale, in WPF lo stesso risultato si può ottenere abbastanza facilmente grazie alla possibilità di sottoscrivere uno o più eventi esposti da una classe indipendentemente da dove venga poi utilizzata la relativa istanza. Immaginiamo di avere due window, ognuna con un pulsante e di voler loggare quando questi vengono premuti. Le operazioni da eseguire sono: ...
VB2008 parte col piede sbagliato per quanto rigurda WPF: Basta infatti creare una nuova applicazione WPF, premere F5 per avere un clamoroso errore di compilazione (se, da bravi programmatori avete attivato Option Strict On) Il problema sta nelle nuove WPF MyExtensions introdotte post Beta2 (e post RC) che qui falliscono a causa del cast implicito: <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
Friend ReadOnly Property Application() As Application
Get
Return Global.System.Windows.Application.Current
End Get
End Property
Al momento la soluzione consiste nel aggiustare manualmente i templates...
Oggi, partendo da una necessità completamente diversa, ho realizzato un template che si comporta come se fosse uno Usercontrol. Tutto è partito dalla necessità di definire un custom template per una textbox, con Blend, una volta instaurato un buon rapporto, è una operazione "relativamente" semplice e decisamente più veloce che scriversi lo XAML a mano. In Blend il template appare come in fig.1. fig.1 La "stranezza" sta nel fatto che nel template della textbox ci sono anche dei pulsanti che voglio utilizzare per copiare e incollare il text della textbox....
Se avete usato Snoop sicuramente apprezzerete questa nuova versione creata da Josh Smith in forma di debugger visualizer per VS2005/VS2008 attraverso il quale è possibile analizzare il visual tree dell'elemento selezionato, analizzarne le proprietà e, dettaglio interessante, capire la provenienza del valore attuale delle relative dependency properties. Da avere! Technorati Tags: WPF,Debugger Visualizer
Se vi interessa WPF non potete perdervi questa ghiotta collezione di sessioni e demos tenute durante il WPF Bootcamp a Redmond (in realtà i lab sono gli stessi del Mix 07) Link: WPF Bootcamp Technorati Tags: WPF
Se avete visto un qualsiasi frammento di XAML è probabile che abbiate incontrato una markup extension, ovvero quelle particolari definizioni racchiuse tra parentesi graffe (es: {x:Null}). Oggi mi è venuto comodo visualizzare in un texblock il valore di un setting e per far questo ho sfruttato la possibilità di definire delle custom markup extensions semplicemente creando delle classi che ereditano da MarkupExtension. [MarkupExtensionReturnType(typeof(string))]
public class StringSettingExtension:MarkupExtension
{
public StringSettingExtension():base(){}
public StringSettingExtension(string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
throw...
A volte una domanda a prima vista banale in realtà si rileva più complicata del previsto, nello specifico la domanda era: Come posso recuperare un controllo all'interno di un mio custom ValueConverter?. La prima risposta è stata quella di passare un riferimento all'elemento host attraverso ConverterParameter e poi usare il metodo FindName : ovvero usare qualcosa tipo: <Window.Resources>
<local:MyMultiValueConverter x:Key="mc" />
</Window.Resources>
...
<TextBox Text="{Binding Path=Title, Converter={StaticResource mc},
ConverterParameter={Binding...
Partiamo da un caso tanto semplice quanto comune: Una classe EventSource che genera un evento EventTriggered sottoscritto da un altra classe EventConsumer. EventSource: 1: class EventSource 2: { 3: public event EventHandler EventTriggered; 4: 5: public void DoRaise(){ 6: if (EventTriggered != null)EventTriggered(this, EventArgs.Empty); 7: } 8: ...
Uno degli aspetti meno conosciuti del databinding di WPF è la naturale gestione degli aggiornamenti nel caso questi avvengano da un thread secondario.Supponiamo di avere una fonte dati che quando il metodo QueryValue viene invocato aggiorni i propri dati attraverso un thread secondario in modo da non bloccare l'intera applicazione. class MyData:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public int Value { get; set; }
public void QueryValue()
{
ThreadPool.QueueUserWorkItem(delegate(object o)
...
Oggi nel newsgroup di Blend è emersa una domanda interessante ovvero come creare uno StackPanel che possa far sparire e riapparire gradualmente gli elementi non completamente visibili dopo un ridimensionamento. Quale migliore occasione per inventarsi un FadeStackPanel? using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;
namespace FadePanel
{
class FadeStackPanel:StackPanel
...
Avendo un file xaml e volendolo embeddare all'interno di un assembly le Build Action disponibili (e funzionanti) sono: Page e Resource. Qual'è la differenza tra le due? Usiamo Reflector per capire la differenza: Build Action=Resource Build Action=Page Come potete vedere l'opzione Page produce del baml, ovvero dello xaml tokenizzato in forma binaria e quindi sicuramente più performante dell'equivalente xaml. Technorati Tags: WPF , Build Actions
Tutti i dettagli qui. Technorati Tags: WPF, Blend
Tempo fa Charles Petzold nel suo blog aveva promesso di omaggiare con una copia del suo nuovo libro 3D Programming for Windows quelli che avrebbero risposto al suo appello. Beh, è stato di parola e oggi è arrivata la mia copia autografata. Non avendo ancora letto il libro non posso esprimere pareri, l'unica nota che posso aggiungere è che, questa volta, ci sono parecchie figure e gli esempi sono più contenuti rispetto al precedente libro su WPF. Non posso concludere che ringraziando l'autore: Thank you Charles! ...
Lanciando Expression Blend all'interno di una virtual machine noterete nella finestra di about questa nota: No optimized rendering is supported by your system and video driver. mentre lanciandolo normalmente la scrittà sarà:Full optimized rendering is supported by your video driver. Questo tipo di informazione si ottiene con una singola riga di codice: 1: int tier = RenderCapability.Tier >> 16;
Il valore che tier può assumere e che può essere usato per disabiltare features non compatibili con un accellerazione di tipo software può essere:
0:...
Siete curiosi di capire come funzionano gli stili di Windows Presentation Foundation? Qui trovate un articolo che, spero, possa esservi d'aiuto. Technorati Tags: MSDN, Articoli, WPF
Questo post nasce da una domanda di Igor, posto qui il risultato affichè possa essere d'aiuto ad altri.L'obiettivo è quello di aggiornare il contenuto di uno Statusbaritem quando le varie texbox contenute in una window prendono il focus, il testo da riportare è contenuto nella proprietà Tag delle singole Textbox.In alternativa al classico routed event a livello di Window, una soluzione interessante nasce dal fatto che ad uno stile è possibile associare un evento che verrà invocato allo scattare del relativo Trigger attraverso la tag EventSetter.Di seguito lo XAML e il codice: 1: ...
Su Codeplex è apparsa una libreria di controlli WPF chiamata WPF Contrib. Controls: NotifyIcon, ImageStrip, NineGridBorder Panels: AutoGrid, ColumnStackPanel Converters: DarkColorConverter, LightColorConverter, FormattedTextConverter Dialogs: FolderBrowserDialog, TaskDialog Utilities: BindingHelpers, ColorHelpers, DependencyHelpers, AnimationHelpers, UIHelpers Animation: Animation Framework Themes Non ho ancora avuto modo di provarli ma, a prima vista, sembrano interessanti. Technorati Tags: WPF, WPF Controls