WPF http://blogs.ugidotnet.org/Giorgio/category/WPF.aspx WPF it-IT Giorgio Sardo Subtext Version 2.6.0.0 Designertopia e la serie Expression http://blogs.ugidotnet.org/Giorgio/archive/2007/02/13/70680.aspx <p>Qualche settimana fa è stata presentata a Londra, durante l'evento <a href="http://www.designertopia.net/">Designertopia</a>,&nbsp;la nuovissima (e ancora incompleta) suite <a href="http://www.microsoft.com/italy/msdn/prodotti/expression/default.mspx">Microsoft Expression</a>, composta da quattro strumenti:</p> <ul> <li>Expression Web: per la creazione di siti web (ricordate Frontpage? Bene, questo è meglio <img alt="fingerscrossed" src="http://spaces.live.com/rte/emoticons/fingerscrossed.gif">&nbsp;)</li> <li>Expression Design: un comodissimo tool per lavorare con grafica vettoriale.</li> <li>Expression Blend: lo strumento più comodo e veloce per lavorare con le interfacce grafiche delle applicazioni WPF</li> <li>Expression Media: uno strumento per il post-editing e l'authoriting di contenuti multimediali</li></ul> <p>A parte Expression Web, gli altri sono tool <u>giovani</u>, in Beta 1/2 o CTP...ma è previsto il loro rilascio entro la fine dell'anno. Durante l'evento sono state presentate molte delle applicazioni costruite con questi tool negli ultimi mesi, destinate al "real world": ad esempio il <a href="http://firstlook.nytimes.com/index.php?cat=4">New York Times</a>, London Underground, &nbsp;<a href="http://blogs.msdn.com/tims/">tante altre</a>...</p> <p>A questo punto vi chiederete...molto interessante, ma cosa c'è di nuovo? La novità è che in Italia abbiamo già un User Experience Evangelist, Roberto Cavallini,&nbsp;che si occuperà di questa suite e ci mostrerà <em>prossimamente</em> demo...affascinanti!!! Non resta&nbsp; che attendere... <img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif"></p> <p><a href="http://www.giorgiosardo.com/BlogPictures/DesignertopiaelaserieExpression_11451/DSCN10003.jpg" target="_new" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" src="http://www.giorgiosardo.com/BlogPictures/DesignertopiaelaserieExpression_11451/DSCN1000_thumb1.jpg" width="640" border="0"></a> </p> <p>Nella foto, da sinistra a destra: Riccardo Sponza, Me, Roberto Cavallini.</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/70680.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2007/02/13/70680.aspx Tue, 13 Feb 2007 20:49:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2007/02/13/70680.aspx#feedback 4 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/70680.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/70680.aspx [TIP] Interpolare dei punti con una Spline http://blogs.ugidotnet.org/Giorgio/archive/2007/01/28/68947.aspx <P></P> <P>Le Spline sono curve controllate dai punti di controllo: usando WPF &#232; immediato disegnare una spline definendone i punti di controllo associati.</P> <P>E' leggermente pi&#249; complicato invece disegnare una Spline partendo dai punti per cui la curva deve passare. In questo caso &#232; sufficiente utilizzare l'algoritmo di interpolazione Catmull-Rom, cos&#236; definito:</P> <BLOCKQUOTE> <P>Let c(i) be the points you wish to interpolate through. Let b(i) be the Bezier control points. Then:</P> <P>B(0) = c(i) <P>B(1) = (c(i+1)-c(i-1))/6 + c(i) <P>B(2) = (c(i)-c(i+2))/6 + c(i+1) <P>B(3) = c(i+1) <P>Note that the very first or very last interpolation point won&#8217;t actually be interpolated. You can work around this by creating a dummy interpolation point at the beginning.</P></BLOCKQUOTE> <P>Nel caso in cui siate interessati una implementazione pratica del codice non esitate a contattarmi (eventualmente scriver&#242; un articoletto per UGI). <P><EM>&nbsp;</EM></P><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/68947.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2007/01/28/68947.aspx Sun, 28 Jan 2007 14:29:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2007/01/28/68947.aspx#feedback 1 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/68947.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/68947.aspx [TIP] Ottimizzare performance 3D di WPF http://blogs.ugidotnet.org/Giorgio/archive/2007/01/28/68946.aspx <P>WPF mette a disposizione un framework potentissimo per lavorare con oggetti e animazioni 3D. Noterete tuttavia che man mano che le interfacce si fanno pi&#249; complesse, le performance dell'applicazione tendono a decadere velocemente.</P> <P>Ecco quindi solo uno dei tip per accellerare l'esecuzione di oggetti tridimensionali. Supponiamo che abbiate una superficie (piano, sfera, quello che volete :)) tridimensionale e che vogliate applicare su di essa un VisualBrush. </P> <P>La strada pi&#249; semplice e veloce &#232; quella di decorare il materiale della superficie con un VisualBrush, la cui Visual pu&#242; puntare a un oggetto 2D o un oggetto creato a runtime: questo approccio tuttavia occupa molte risorse per il binding del Visual3D al brush originale.</P> <P>Una soluzione che accellera parecchio le prestazioni grafiche pu&#242; essere quella di convertire manualmente il VisualBrush in una immagine (ImageBrush), applicando poi all'oggetto 3D solo l'immagine. Il contro di questa soluzione &#232; che si perde il binding tra la superficie e il brush: dovrete qiundi riapplicare l'immagine alla superficie ogni volta che il brush iniziale viene modificato. Vi assicuro per&#242;&nbsp; che il miglioramento prestazionale &#232; elevatissimo: nella maggior parte delle applicazioni conviene quindi complicare un po' di pi&#249; il codice, risparmiando in prestazioni.</P> <P>Ecco la funzione che vi permette di fare la magica trasformazione di un VisualBrush in ImageSource:</P> <P></P> <BLOCKQUOTE> <P>public ImageSource RasterizeVisual(VisualBrush visualBrush) <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rect bounds = VisualTreeHelper.GetDescendantBounds(visualBrush.Visual); <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RenderTargetBitmap rtb = new RenderTargetBitmap((int)(bounds.Width), <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (int)(bounds.Height), <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 96, <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 96, <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PixelFormats.Pbgra32); <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawingVisual dv = new DrawingVisual(); <P>using (DrawingContext ctx = dv.RenderOpen()) <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctx.DrawRectangle(visualBrush, null, new Rect(new Point(), bounds.Size)); <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rtb.Render(dv); <P>return rtb; <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P></BLOCKQUOTE> <P><EM>&nbsp;</EM></P><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/68946.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2007/01/28/68946.aspx Sun, 28 Jan 2007 14:16:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2007/01/28/68946.aspx#feedback http://blogs.ugidotnet.org/Giorgio/comments/commentRss/68946.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/68946.aspx [WPF] 3D Tools for the WPF http://blogs.ugidotnet.org/Giorgio/archive/2006/12/17/59931.aspx <p>Sono stati rilasciati (in versione 1.0) i 3D Tools per Windows Presentation Foundation. Si tratta di una collezione di tools ed helper che semplificano enormemente la vita degli sviluppatori WPF.</p> <p>Merita una particolare menzione la funzionalità di mapping 2D-3D, che risolve il problema dell'interazione bidimensionale con un ambiente tridimensionale utilizzando una implementazione del&nbsp;ModelVisual3D che associa ad ogni suo nodo 2D un oggetto 3D su cui applica&nbsp;poi dei&nbsp;"Virtual Hit" in fase di rendering...insomma...fa tutto lui! <img alt="smile_regular" src="http://spaces.live.com/rte/emoticons/smile_regular.gif"></p> <p>Trovate i sorgenti su <a href="http://www.codeplex.com/3DTools/" target="_blank">Codeplex</a>.</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/59931.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/12/17/59931.aspx Sun, 17 Dec 2006 20:31:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/12/17/59931.aspx#feedback 1 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/59931.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/59931.aspx UniveRSS &ndash; a 3D Vista RSS reader http://blogs.ugidotnet.org/Giorgio/archive/2006/11/20/55663.aspx <p>Su segnalazione di Urs Müller, vi rigiro il link di <strong>UniveRSS</strong>, una applicazione semplice scritta con WPF che mostra alcune delle potenzialità del nuovo framework: 3D animation, data binding, rss, ...</p> <p><a href="http://www.microsoft.com/emea/msdn/thepanel/featured/universs.aspx" target="_new" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" src="http://www.giorgiosardo.com/BlogPictures/UniveRSSa3DVistaRSSreader_E496/img_universs14.jpg" width="240" border="0"></a> </p> <p><a title="http://www.microsoft.com/emea/msdn/thepanel/countryselection.aspx?tar=registration" href="http://www.microsoft.com/emea/msdn/thepanel/countryselection.aspx?tar=registration"><a title="http://www.microsoft.com/emea/msdn/thepanel/featured/universs.aspx" href="http://www.microsoft.com/emea/msdn/thepanel/featured/universs.aspx">http://www.microsoft.com/emea/msdn/thepanel/featured/universs.aspx</a></p> <p>I sorgenti saranno disponibili con la versione 1.0.</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/55663.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/11/20/55663.aspx Mon, 20 Nov 2006 19:18:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/11/20/55663.aspx#feedback http://blogs.ugidotnet.org/Giorgio/comments/commentRss/55663.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/55663.aspx [WPF #3] Le basi http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46533.aspx <p>In attesa di un progetto da sviluppare, descrivo brevemente alcuni aspetti chiave di WPF.</p> <p>XAML. Cos'è? E' un linguaggio per descrivere gli oggetti. La programmazione dell'interfaccia è simile a quella di una pagina web. Una finestra Window1&nbsp;è composta dai file:</p> <ul> <li>Window1.xaml: descrive gli oggetti con codice xaml</li> <li>Window1.xaml.cs: codice della pagina</li></ul> <p>Tutto quanto è fatto con xaml può essere fatto anche esclusivamente da codice. Non vale il contrario ovviamente.</p> <p>Un progetto nuovo si presenta così:</p> <p>&lt;Window x:Class="Progetto.Window1"<br>xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a><br>xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xaml&quot;">http://schemas.microsoft.com/winfx/2006/xaml"</a><br>Title="Progetto" Height="300" Width="300"<br>&gt;<br>&lt;Grid&gt;<br>&lt;/Grid&gt;<br>&lt;/Window&gt;</p> <p>Si tratta di una finestra contenente una griglia vuota: se siete abituati alla programmazione su Asp (A LIVELLO SINTATTICO) fin qui non è molto differente. Il compilatore tradurrebbe la pagina nel seguente codice:<br></p> <p>Window Window1 = new Window(); //Costrutture standard<br>Window1.Width=300; Window1.Height=300;<br>Window1.Content = new Grid();</p> <p>Risulta evidente da subito il vantaggio di poter definire l'interfaccia grafica da una parte (XAML) e poter inserire il codice in un altro luogo (CS): in teoria l'applicazione potrebbe essere portata avanti da due persone diverse (grafico, che non sa nulla del codice; sviluppatore, che non sa disegnare...). In pratica, come ho scritto in un post precedente, i miei tentativi di lavorare insieme a un grafico sono stati abbastanza ostici. Il grafico infatti deve inevitabilmente essere al corrente di come funziona il framework, di quali siano a grandi linee le possibilità, etc...quindi è necessaria una fase di "addestramento" preventiva del grafico.<br>In sostanza vedo il grafico come uno "sviluppatore specializzato", piuttosto che una persona che arriva da un ambito di design.</p> <p>Proseguendo...ogni oggetto ha delle proprietà. Ad esempio lo sfondo della finestra potrebbe essere&nbsp;un "colore solido", impostabile in questo modo:</p> <p></p>&lt;Window x:Class="Progetto.Window1"<br>xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a><br>xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xaml&quot;">http://schemas.microsoft.com/winfx/2006/xaml"</a><br>Title="Progetto" Height="300" Width="300" <strong>Background="Blue"<br></strong>&nbsp;&gt; <p>E se volessimo assegnare un gradiente, come è possibile scrivere tale informazione sotto forma di codice xaml?</p> <p>La sintassi è estramemnte flessibile: WPF riconosce&nbsp;la sintassi &lt;Oggetto.Proprietà&gt; ..XXX... &lt;/Oggetto.Proprietà&gt; per qualsiasi proprietà. Nella maggior parte dei casi la proprietà prevede un solo oggetto (chiamato child) come valore. <br>E' tuttavia possibile inserire anche un elenco di valori (chiamati children), nel caso in cui la proprietà&nbsp;&nbsp;implementi una interfaccia ICollection.</p> <p>Ad esempio per avere uno sfondo gradiente:</p> <p>&lt;Window x:Class="Progetto.Window1"<br>xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;">http://schemas.microsoft.com/winfx/2006/xaml/presentation"</a><br>xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xaml&quot;">http://schemas.microsoft.com/winfx/2006/xaml"</a><br>Title="Progetto" Height="300" Width="300"&nbsp;&nbsp;&gt;</p> <p><strong>&lt;Window.Background&gt;<br>&lt;LinearGradientBrush&gt;<br>&lt;LinearGradientBrush.GradientStops&gt;<br>&lt;GradientStop Color="Red" Offset="0"&gt;&lt;/GradientStop&gt;<br>&lt;GradientStop Color="Blue" Offset="0"&gt;&lt;/GradientStop&gt;<br>&lt;/LinearGradientBrush.GradientStops&gt;<br>&lt;/LinearGradientBrush&gt;<br>&lt;/Window.Background&gt;</strong> <p>Si noti la forte gerarchia e struttura delle chiavi e dei valori.</p> <p>Potete pensare di inserire oggetti dentro oggetti dentro oggetti all'infinito. Ad esempio, mi spingo in un volo pindarico:</p> <p><em>Immaginate un calendario dentro una palla rimbalzante&nbsp;che nel monitor di un computer che è dentro una stanza&nbsp;3D che è usata come sfondo del pulsante "Scegli Data". Tutto questo è possibile, e avrà la forma (in pseudocodice):</em></p> <p><em>&lt;Button Text="Scegli data"&gt;<br>&nbsp; &lt;Button.Background&gt;<br>&nbsp;&nbsp;&nbsp; &lt;Viewport3D&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;GeometryModel3D&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;GeometryModel3D.VisualBackgroud&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Ball&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Ball.Trasformazioni&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..........<br></em></p> <p><em>Dopo aver capito quali sono gli elementi base e i mattoncini che si possono usare vedrete che WPF apre allo sviluppatore le porte dell'immaginazione.</p></em> <p>Una peculiarità del codice XAML è quindi&nbsp;la sua solida struttura e gerarchia di oggetti. Ciò da una parte rappresenta un vantaggio perchè evita errori o casi dubbi. Dall'altro appesantisce enormemente la pagina e alla lunga affatica la comprensione e la manutenzione di una pagina. Nel mio caso sono arrivato a 25000 righe di codice xaml per una singola window...(ovviamente quella pagina ora è stata rifattorizzata sfruttando il codice...)</p> <p>Proprio per questo motivo sono necessari più che mai i commenti</p> <p>&lt;!-- --&gt; </p> <p>per separare le diverse parti della pagina. Nel prossimo post elencherò alcuni elementi base di WPF che certamente userete nelle vostre applicazioni.</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/46533.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46533.aspx Tue, 22 Aug 2006 17:05:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46533.aspx#feedback 1 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/46533.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/46533.aspx [WPF #2] La demo http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46514.aspx <p>Premesso che non mi pare una saggia idea fare un corso completo di WPF utilizzando come strumento questo blog...cercherò da qui in poi di toccare alcuni argomenti "teorici" che ritengo interessanti (partendo dai più semplici e arrivando ai più complessi) attraverso lo sviluppo <em>from scratch </em>di una applicazione pratica. </p> <p>LA domanda è: che applicazione? </p> <p>Ho già in mente qualcosa...ma aspetto qualche giorno nel caso in cui vogliate darmi qualche idea o spunto o richiesta o o o... </p> <p>Fatevi sentire! :)</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/46514.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46514.aspx Tue, 22 Aug 2006 12:04:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46514.aspx#feedback 1 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/46514.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/46514.aspx [WPF #1] Preparare il PC http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46509.aspx <p>Da cosa iniziare se non dal sistema operativo?</p> <p>Presi dalla voglia di "fare i pionieri", di voler&nbsp;dare una svolta alla propria esperienza, di voler cambiare look al proprio&nbsp;monitor...viene subito voglia di approfittare della situazione per&nbsp;installare Windows Vista Beta 2.<br>Bene: non posso dire <em>non fatelo</em> però... non fatelo :)<br>Io ho <a href="http://blogs.ugidotnet.org/giorgio/archive/2006/07/18/44811.aspx">già ammesso</a> di averlo fatto...e purtroppo mi sono reso conto di non aver preso una decisione ottimale...</p> <p>Windows Vista Beta 2 è un buon sistema operativo, ma è in BETA. Non tutto funziona ancora perfettamente. Non tutti i produttori HW hanno rilasciato i driver aggiornati. Non tutti i prodotti sono già supportati. Il mio consiglio è di installarlo, se potete, su una macchina di test e giocarci e pacioccarci quanto volete...ma non usatelo come macchina per lo sviluppo.</p> <p>La base sopra la quale tutto nasce e si sviluppa è il .Net Framework 3.0. Per fortuna questultimo è compatibile anche con Windows XP, perdendo veramente pochissime funzionalità (impercettibili). Sviluppare oggi su Xp e portare su Vista domani è facile.</p> <p>Per iniziare a lavorare con WPF vi serve, nell'ordine:</p> <ul> <li>Un computer&nbsp;:)</li> <li>Visual Studio 2005 (Express o Professional)</li> <li><a href="http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/default.aspx#runWinFXApps" target="_blank">.Net Framework 3.0 Runtime Components</a></li> <li><a href="http://www.microsoft.com/downloads/details.aspx?familyid=1D7F16B3-D2D5-48F7-9494-6696117EE712&amp;displaylang=en" target="_blank">Windows SDK</a></li> <li>Orcas .Net Framework 3.0 Development Tools: è il componente che vi permetterà di utilizzare VIsual Studio per sviluppare applicazioni con WinFx.</li></ul> <p>Uno dei punti di forza di WPF è la possibilità di astrarre il layer grafico dell'applicazione. Stanno nascendo (e crescendo...) nuovi strumenti per lo sviluppo della grafica, in particolare:</p> <ul> <li><a href="http://www.microsoft.com/products/expression/en/interactive_designer/"><a href="http://www.microsoft.com/products/expression/en/graphic_designer/default.mspx">Microsoft Expression Graphic Designer</a>:</a>per la creazione di immagini vettoriali</li> <li><a href="http://www.microsoft.com/products/expression/en/interactive_designer/">Microsoft Expression Interactive Designer</a>: per la costruzione dell'interfaccia grafica</li> <li><a href="http://www.microsoft.com/products/expression/en/graphic_designer/default.mspx">ZAM3D</a>: per la progettazione di interfacce 3D complesse</li></ul> <p>&nbsp;</p> <p>Personalmente ritengo che ognuno di questi tool sia un ottimo prodotto, in grado di realizzare risultati eccellenti. Tuttavia manca ancora un po' l'integrazione tra essi. Per dirla con una proporzione</p> <p>Interactive Designer : Visual Studio 2005= Frontpage (old) : Visual Studio .Net 2003 (ASP)</p> <p>In sostanza è un ottimo tool che vi permette di disegnare visualmente la vostra applicazione, ma l'output XAML che produce è veramente qualcosa di illeggibile e difficilmente modificabile. E' necessario quindi nel passaggio verso il padre Visual Studio una "rilettura" o "refactoring" del codice prodotto.</p> <p>Un discorso simile vale per ZAM3D, che vi permette di creare animazioni 3D fantastiche...che però sono svincolate dall'interfaccia dell'applicazione.</p> <p>Il mio consiglio riguardo questi strumenti è comunque quello di installarli e provarli: in fondo mi aspetto miglioramenti in futuro...</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/46509.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46509.aspx Tue, 22 Aug 2006 11:38:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46509.aspx#feedback http://blogs.ugidotnet.org/Giorgio/comments/commentRss/46509.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/46509.aspx [WPF #0] La mia esperienza http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46505.aspx <p></p> <p>Negli ultimi mesi ho avuto il piacere di lavorare a un <a href="http://www.giorgiosardo.com/HelloWorld" target="_blank">progetto</a> per il concorso <a href="http://www.imaginecup.com/">Imagine Cup</a>. Ho sviluppato un paio di applicazioni che fanno uso di molte tecnologie interessanti, in particolare: <ul> <li>WPF</li> <li>WCF</li> <li>Sidebar Gadget</li> <li>VSTO</li> <li>....</li></ul> <p>Sulla scia di <A href="http://blogs.ugidotnet.org/corrado/category/2197.aspx" target="_blank">Corrado</a>, mi piacerebbe scrivere qualche post riguardo XAML e raccontarvi la mia esperienza (positiva e negativa) con Windows Presentation Foundation <em>aka Avalon</em>. </p> <p>Come <A href="http://blogs.ugidotnet.org/raffaele/archive/2006/08/18/46349.aspx">Raffaele</a> ha perfettamente scritto, la curva di apprendimento &#232; abbastanza ostica, soprattutto se si considera che il framework .Net 3.0 &#232; ancora in fase di BETA. </p> <p>Tuttavia sono sicuro che chiunque dotato di passione e pazienza possa cimentarsi senza problemi nei meandri di XAML. </p> <p>Il gioco vale la candela...</p><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/46505.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46505.aspx Tue, 22 Aug 2006 11:10:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/08/22/46505.aspx#feedback 2 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/46505.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/46505.aspx [WCF] How to solve a System.InvalidOperationException http://blogs.ugidotnet.org/Giorgio/archive/2006/07/23/45123.aspx <DIV style="WIDTH: 800px"> <P><FONT color=#ff0000>To solve the problem you need to compile your assembly in the Bin folder of the WebApplication (bin\debug or bin\release are not valid folder). If you're using Visual Studio you can config the output folder by the project properties, in the BUILD tag.</FONT> </P> <H1>Server Error in '/HWWebService' Application. </H1> <H2><I>The type 'Sardo.Giorgio.ServiceName', provided as the Service attribute value in the ServiceHost directive could not be found.</I> </H2><FONT face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif "><B>Description: </B>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. <BR><BR><B>Exception Details: </B>System.InvalidOperationException: The type 'Sardo.Giorgio.ServiceName', provided as the Service attribute value in the ServiceHost directive could not be found. <BR><BR><B>Source Error:</B> <BR><BR> <TABLE width="100%" bgColor=#ffffcc> <TBODY> <TR> <TD><CODE>An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</CODE> </TD></TR></TBODY></TABLE></FONT></DIV><img src="http://blogs.ugidotnet.org/Giorgio/aggbug/45123.aspx" width="1" height="1" /> Giorgio Sardo http://blogs.ugidotnet.org/Giorgio/archive/2006/07/23/45123.aspx Sun, 23 Jul 2006 20:31:00 GMT http://blogs.ugidotnet.org/Giorgio/archive/2006/07/23/45123.aspx#feedback 8 http://blogs.ugidotnet.org/Giorgio/comments/commentRss/45123.aspx http://blogs.ugidotnet.org/Giorgio/services/trackbacks/45123.aspx