Silverlight
Post related to Silverlight technology
I’m a longtime supporter of Laurent Bugnion’s MVVM Light Toolkit and I love using it together with my favorite IOC Container NInject, one of the most “boring” area is creating the class that exposes ViewModel instances in a design time way: the famous ViewModelLocator class. Now that Silverlight5 has custom markup extensions I thought: what about using it to simplify View vs ViewModel lookup? Here’s my attempt, let’s start with a simple ViewModel (nothing really new here, just to give you a complete scenario) public class...
Paging and sorting are, de-facto, standard required implementations in any line of business (LOB) application and we, as Silverlight developers, all know how “boring” (I won’t categorize the feature as ‘complicated’) is the implementation, in special case if we’re dealing with a WCF Service and request its introduced after service design is completed. Wouldn’t it be good to finally forget about paging and sorting and use a common reusable implementation? well’ you’ll be happy to know that thank to new classes added to RIA Service SP1 this is finally possible. Let’s introduce the triad of classes used...
Today I lost some time trying to figure out why my Windows Phone 7 application settings got lost as soon as the application was restarted. After several tests have concluded that the offending code was following one, which, at startup, deletes some “*.cache” files used by the application to store some temporary information. private void ClearCache(){ string[] cacheFiles = this.store.GetFileNames("*.cache"); foreach (string cacheFile in cacheFiles) { this.Delete(cacheFile); }}
Everything looks ok, except that the application settings are stored in a file called “__ApplicationSettings.cache” and so they were...
Non capita spesso, ma nel caso dobbiate accedere alla porta seriale della macchina dove sta girando un applicazione Silverlight 4.0 full trust, ecco un interessante libreria: http://interopcom.codeplex.com/ Technorati Tags: Silverlight 4.0,COM Port
Pur non essendo un caso frequente, può capitare di dover ospitare un applicazione Silverlight proveniente da un dominio diverso dalla pagina host. Un esempio può essere: Pagina html ospitata nel domino foo.com la quale ha al suo interno qualcosa del genere: <div id="silverlightControlHost"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="http://www.anothersite.com/myapp.xap"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="white" /> ...
Se è vero che la prima impressione è quella che conta, perchè questo non vale per le applicazioni Silverlight? Alla data di oggi l’adozione mondiale di Silverlight è attorno al 60%, questo significa che il 40% degli utenti che finiscono sulla nostra pagina quello che si ritrovano è un desolante: oppure che per un utente non esperto potrebbe significare tutto e niente. Non sarebbe meglio fornire un esperienza più “amichevole” e magari riuscire anche a capire, tra gli utenti che non hanno Silverlight, quanti hanno deciso di installare il plug-in e quanti...
Così com’è successo per Silverlight e WPF il team dei WCF RIA Services sta raccogliendo feedback per capire quali sono le le features da implementare nella prossima versione. Volete dire la vostra? allora partecipate a questa survey: http://dotnet.uservoice.com/forums/57026-wcf-ria-services Technorati Tags: WCF RIA Services
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...
Chi mi conosce sa come come per me la Blendability sia una requisito essenziale nello sviluppo di un applicazione WPF/Silverlight, non tutti la pensano così ma come sappiamo il mondo è bello perchè è vario. Oggi ho passato gran parte della mattinata a rifattorizzare del codice affinchè la design experience fosse la migliore possibile, ma malgrado tutti i tentativi in una particolare situazione la blendability non voleva saperne di funzionare senza apparente motivo. Chi di voi ha affrontato problemi di questo tipo sa quanto sia difficile intervenire in quanto non si ha il controllo...
Partecipate attivamente al processo di design delle features di Silverlight 5.0 compilando questa survey: http://www.surveymonkey.com/s/WXPFCS5 Technorati Tags: Silverlight
Oggi ho avuto la necessità di consumare dei servizi da un applicazione Silverlight, questi non stanno sullo stesso sito di origine dell’applicazione e sono protetti da un file ClientAccessPolicy.xml che da accesso ai soli siti autorizzati. Per una lunga serie di motivi, disabilitare temporaneamente il filtro in clientaccesspolicy.xml non è possibile, e quindi, come debuggo il codice se ogni chiamata ritorna una SecurityException? La risposta sta in Fiddler che, tra la miriade di funzionalità ha anche quella di ridirigere le chiamate dirette a una uri verso un altra, è quindi bastato aggiungere al progetto web...
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...
Sono da sempre un sostenitore di Blend e continuo a ritenerlo uno strumento indispensabile per chi sviluppa applicazioni WPF/Silverlight (ora dovrei forse anche aggiungere Windows Phone 7…) ovviamente ci sono delle funzionalità che dal basso della mia esperienza ho sempre ritenuto degli ottimi “tentativi” ma nulla di più: il caso più evidente sono i Design time data, ovvero la possibilità di definire dei dati disponibili a design time per facilitare il disegno della user Interface Il motivo percui non ho mai preso in considerazione questa possibilità e facile da capire: Se i dati a runtime provengono...
Un applicazione WPF/Silverlight basata su Model-View-ViewModel è il risultato di un insieme di dettagli che fanno la differenza, ad esempio una delle cose che sto iniziando ad apprezzare e grazie al quale è possibile fare delle cose veramente carine con poco sforzo è il VisualStateManager (che in WPF 4.0 diventa parte integrante della piattaforma) Prendiamo un caso molto semplice: Cambiare il colore di un rettangolo (ma la cosa potrebbe essere complessa a piacere) alla pressione di un tasto. Usando Blend, definiamo due stati Normal e Fail e in ognuno di essi cambiamo il...
Sto lavorando su un applicazione Silverlight che, tra le varie funzionalità, deve eseguire il play di streams in formato .wma e per questo requisito la scelta cade automaticamente sulla classe MediaElement. Convinto della banalità della cosa ho scritto qualcosa tipo: MediaElement me = new MediaElement();
me.Source = new Uri("http://thesite.com/stream.wma", UriKind.Absolute);
me.Play();
per scoprire che non funziona, ho quindi rimediato usando:
WebClient wc = new WebClient();
wc.OpenReadCompleted += (s, arg) =>
{
...
Quando si usa la funzionalità Edit Template->Edit a Copy di Blend Blend in realtà crea uno style che applica il template appena estratto. Personalmente mi piace organizzare le risorse all’interno di resource dictionaries (styles.xaml, templates.xaml…) e, sebbene Blend permetta di specificare dove posizionare lo style il risultato è che style e template sono tutt’uno e spesso finisco per spostare il template nel relativo resource dictionary e linkarlo nello style via {StaticResource} manualmente. Oggi, Laurent, mi ha indicato come fare il tutto direttamente da Blend: Mentre si è in modalità di editing...
Ho appena terminato slides e demo per il “Community Tour” di martedì prossimo, l’argomento è tra i miei preferiti: WCF RIA Services non solo perchè li uso quotidianamente ma perchè è ormai una tecnologia della quale non riuscirei più a farne a meno sviluppando in Silverlight. Se sviluppate applicazioni Silverlight (o pensate di iniziare a svilupparle) e ancora non li state usando, venite alla sessione, vi renderete subito conto di quello che vi state perdendo… CU There! Technorati Tags: WCF RIA Services,Community Tour,Workshop
Gestire situazioni in cui si hanno problemi di concorrenza tra utenti con i WCF RIA Services è veramente molto semplice, supponiamo di voler sapere se durante un operazione di update qualcuno ha modificato prima di noi gli stessi records. Il codice da scrivere è il seguente: private void OnUpdate(object sender, RoutedEventArgs e)
{
this.customersContext.SubmitChanges(lop =>
{
if(lop.HasError)
...
Un altra interessante novità di Silverlight 4.0 è il fatto che il default template di ListBox/ComboBoxItem include tre nuovi stati: BeforeLoaded,Loaded e Unloaded. Agendo su questi stati è possibile modificare lo stato dell’item quando questo viene aggiunto e/o rimosso dalla lista, con Blend4 gestire questi stati è semplicissimo: Aggiungiamo una listbox (o combobox) ad una pagina ed editiamone il relativo ItemContainerStyle: A questo punto andiamo ad agire sugli stati indicati in precedenza: in questo caso agiremo semplicemente sulla proprietà Opacity impostandola a zero negli stati BeforeLoaded e Unloaded:...
Ho parlato di MEF (Managed Extensibility Framework) parecchio tempo fa, ora che il framework è ben definito è evidente che se dovete sviluppare un applicazione ‘dinamica’ (o a plug-in se preferite) MEF è sicuramente la tecnologia da utilizzare. Ovviamente se l’applicazione è WPF o Silverlight l’accoppiare MEF e Model-View-ViewModel è d’obbligo, ecco quindi un semplice esempio di M-V-VM basato sul principio di composizione di MEF. Data Provider public interface IProvider
{
string GetName();
}
...
Silverlight 3.0 ha introdotto l’oggetto Frame grazie al quale è possibile navigare le pagine che compongono l’intera applicazione, l’utilizzo di Frame è abbastanza semplice, supponendo infatti di avere la pagina principale della nostra applicazione (MainPage.xaml) definita in questo modo: <Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="2*" />
...
Scopo: Muovere un elemento X dalla posizione “A” alla “B” usando l’oggetto VisualStateManager di WPF e Silverlight. In tutti e tre i casi (WPF 3.5, WPF 4.0 e Silverlight X) lo XAML generato da Blend è esattamente lo stesso: 1: <Grid x:Name="LayoutRoot">
2: <VisualStateManager.VisualStateGroups>
3: <VisualStateGroup x:Name="States">
4: <VisualState x:Name="Normal"/>
5: ...
Sviluppate applicazioni Silverlight e non usate i WCF RIA Services? beh, non sapete cosa vi state perdendo… Sebbene la stragrande maggioranza delle demo facciano direttamente uso delle entità generate dall’ORM di turno (Entity Framework/LinqToSql per la maggior parte dei casi) non è assolutamente detto che: Usare i WCF RIA Services significhi necessariamente usare Entity Framework o Linq To SQL (anche se questo indubbiamente aiuta) Usare i WCF RIA Services richieda la proiezione lato client delle entità generate dall’ORM per lo storage. Se, giustamente, vogliamo separare il dominio...
Sono stati rilasciati i WCF RIA Services compatibili con Visual Studio 2008 SP1: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce Technorati Tags: WCF RIA Services
Ho scritto un documento che descrive le principali novità di Silverlight4.0: lo trovate qui. (versione Italiana) I wrote a document that provides an overall view of Silverlight’s 4.0 main new features: get it here (English version) Technorati Tags: Silverlight 4.0
Ci sono dei casi in cui si deve debuggare un applicazione Silverlight mentre è in modalità Out-of-Browser, la prima cosa che viene in mente è attaccare il debugger al processo sllauncher.exe (l’host delle applicazioni OOB) ma in realtà esiste un modo più semplice: Installare l’applicazione Out-Of-Browser Andare nelle proprietà del progetto e nella tab Debug selezionare Installed Out-Of-Browser application Premere F5… Technorati Tags: Silverlight,Out-Of-Browser
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: ...
Col SP1 del framework 3.5 è stato introdotto il namespace System.ComponentModel.DataAnnotations il quale ha al suo interno degli interessanti attributi di validazione (dettagli qui) Ad esempio, volendo validare una proprietà del nostro ViewModel, quello che dobbiamo fare è semplicemente scrivere del codice come quello che segue dopo aver aggiunto un riferimento a System.ComponentModel.DataAnnotations: 1: public class MyViewModel:INotifyPropertyChanged
2: {
3: ...
A tutti gli estimatori di Prism segnalo il rilascio della versione 2.1, le principali novità sono: All Visual Studio projects (Composite Application Library, reference implementation, and Quickstarts) were migrated to use Silverlight 3. TabRegionControlAdapter was modified to support binding in the TabItem’s control header in Silverlight 3. CreateXap.bat file was modified to search for Silverlight 3 assemblies if the Silverlight 2 reference assemblies cannot be found. Implemented the WeakEvent Pattern for the DelegateCommand’s and CompositeComand’s (more on this below). Download: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=387c7a59-b217-4318-ad1b-cbc2ea453f40 Technorati Tags: Prism
Ricevere un regalo fa sempre piacere, ma quando a farti un regalo sono 4 amici e professionisti del settore la soddisfazione aumenta, ringrazio quindi ufficialmente Daniele,Cristian,Alessio e Marco per avermi omaggiato di una copia della loro ultima fatica: “Silverlight 3 Guida completa per sviluppatori e designers”. Ho dato una sfogliata veloce ieri sera e, con la giusta sintesi, mi pare che copra tutto quello che c’è da sapere per iniziare a sviluppare con Silverlight 3. Ottimo lavoro ragazzi! Technorati Tags: Silverlight 3
Come se non ci fosse già abbastanza roba da installare, ecco il Silverlight3 Toolkit October 2009 installation: http://silverlight.codeplex.com/ Tra le principali novità: Il supporto a VS2010 (che include finalmente il designer per Silverlight ) Supporto da parte di alcuni controlli della MouseWheel La gestione integrata (ovviamente nel browser) del drag and drop, per quest’ultima feature consiglio questo post: http://themechanicalbride.blogspot.com/2009/08/new-with-silverlight-toolkit-drag-and.html Tutti i controlli sono ora Silverlight3 only Technorati Tags: Silverlight Toolkit
Dopo avere installato Visual Studio 2010 Beta2 è possibile migliorare le performance del designer WPF/Silverlight modificando il registry in questo modo: 1. Close any open VS instances 2. Open RegEdit (as an administrator as needed) 3. Select the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0 key 4. Right click and add key, type ClrHost 5. In the newly created key, right click and add a DWORD32 with the name StartupFlags 6. Set its value to 5 ...
La stampa è uno dei punti deboli di Silverlight (in pratica non esiste nulla), le uniche soluzioni che ho visto interagiscono col il browser con tutte le limitazioni e complicazioni del caso. SmartPrint for Silverlight sembra un prodotto interessante in grado di generare un PDF contente ciò che è visibile a video o parte di esso. Non è un generatore di reports, per quello il prodotto più interessante che ho avuto modo di provare è Report Sharp Shooter. Technorati Tags: Silverlight,Report generation,Printing
Spesso mi viene chiesto dove è possibile reperire dei temi/skin per WPF e Silverlight da applicare alle proprie applicazioni in modo da ottenere velocemente un look and feel più moderno e accattivante. Visto che puntualmente mi dimentico l’indirizzo del sito, me lo segno qui: http://www.xamltemplates.net/ Technorati Tags: XAML Templates
Questo post nasce da un effettiva richiesta in un newsgroup e, visto che può servire ad altri ecco un piccolo how-to su come personalizzare il controllo Calendar di Silverlight, in particolare la richiesta era quella di cambiare il colore dell’header e delle domeniche, in pratica passare dalla situazione A a quella B (vedi sotto) Una volta capito che il controllo non espone una proprietà che permette di cambiare il colore dell’header e sopratutto appurato che non esiste un contenitore che raggruppa l’intera parte header, cambiare il colore è banale, una volta scoperto che,...
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...
Tempo fa avevo descritto come è possibile propagare le eccezioni da un servizio WCF verso un applicazione Silverlight3. Del procedimento, la parte più noiosa era sicuramente quella necessaria al cambio di HTTP Status Code da 500 a 200, la buona notizia è che grazie alla nuovo Client HTTP Stack presente in Silverlight3 tale cambio non è più necessario, basta infatti aggiungere questa riga allo startup dell’applicazione Silverlight: 1: bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
Per sostituire il browser networking stack usato by default col nuovo Client Networking...
L’altro giorno stavo chattando con Larent Bugnion riguardo nuove features da aggiungere nel suo progetto M-V-VM light toolkit ed entrambi eravamo concordi nella necessità di aggiungere un behavior che mappasse un generico evento verso un comando esposto dal ViewModel. Questa necessità è ancor più sentita in Silverlight dove il meccanismo di commanding, ICommand a parte, non è presente. Un esempio di possibile attached behavior è quello che segue: 1: public static class EventCommand
2: ...
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...
In un architettura basata su Model-View-ViewModel (MVVM) spesso è necessario ‘iniettare’ nel ViewModel delle entities di supporto al ViewModel stesso, ad esempio, in un ottica ViewModel-First è consuetudine passare nel costruttore una generica IView in modo che il ViewModel possa poi comunicare facilmente con la view stessa. L’utilizzo di un interfaccia fa si che questo approccio non comprometta la testabilità del ViewModel in quanto l’interfaccia è facilmente ‘mockabile’ ma Il fatto di avere un ViewModel che non ha un costruttore pubblico senza parametri compromette un altro aspetto al quale è difficile rinunciare: Il supporto a design...
Che l’implementazione di INotifyPropertyChanged porti a scrivere del codice non propriamente ‘bello’ e funzionale è ormai scontato, personalmente non è mai stato un problema, bisogna però avere l’accortezza (e questo non sempre avviene) di rinominare il nome della funzione passato nell’evento quando si fa refactoring: soluzione decisamente molto “Code Smelling”. 1: public class MyClass:INotifyPropertyChanged
2: {
3: string userName;
4:
...
A pochi giorni dal rilascio ufficiale ecco il primo, a dire il vero inaspettato, aggiornamento di Silverlight3 la cui versione passa quindi da 3.0.40624.0 a 3.0.40723.0 L’update è già disponibile via Windows Update oppure qui: http://www.microsoft.com/silverlight/get-started/install/ Non sono previsti aggiornamenti per i vari Tools/SDK etc, l’aggiornamento sembra riguardi: “Excessive media buffering in encoded media which had a lot of script commands in the headers” Technorati Tags: Silverlight3 GDR 1
SimpleStyles sono una collezione di templates utili come punto di inizio per la personalizzazione di controlli pre-esistenti (button, listbox, treeview etc…) Hanno il vantaggio, rispetto al template predefinito, di essere più semplici e quindi rappresentano anche un ottimo strumento didattico per capire come funziona il Visual State Manager e qual’è il suo corretto utilizzo. Li trovate qui: http://blog.nerdplusart.com/archives/silverlightsimplestyles Technorati Tags: Silverlight,Simple Styles -
A questo indirizzo è possibile trovare il primo capitolo (100 pagine) e relativi samples di un libro interament dedicato a SketchFlow, sicuramente da scaricare se siete interessati e non avete ci mai ‘giocato’ in precedenza. Technorati Tags: SketchFlow
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: {...
Credo abbiate intuito che Microsoft sta spingendo molto sul presentare Silverlight3 come la piattaforma per lo sviluppo di RIA applications puntando molto sulle LOB (Line Of Business) Applications, i nuovi .NET RIA Services sono solo un esempio in questa direzione. Oltre alla mia feature preferita (ChildWindow) in Silverlight3 sono stati aggiunti una serie di controlli nati con lo scopo di alleggerire la parte più noiosa delle LOB, ovvero la presentazione dei dati e relativa interazione con l’utente, tra questi il controllo DataForm. Supponiamo di avere una classe Person con le...
In Silverlight2, dopo avere creato il nostro bel servizio WCF che genera una serie di eccezioni (ovviamente di tipo FaultException/FaultException<T>) quando c’è qualcosa che non va, è triste scoprire che di queste eccezioni non ce ne facciamo nulla in quanto non verranno mai intercettate dalla nostra applicazione Silverlight per una lunga serie di motivi. Fortunatamente questa è acqua passata in quanto nella versione 3 le eccezioni vengono correttamente gestite dal plug-in a patto che venga iniettato del codice per aggirare il problema principale: Le eccezioni vengono ritornate con un HTTP Response Code=500 e quindi...
Da oggi è possibile eseguire applicazioni Silverlight2.0 anche in ambiente Linux grazie alla preview della versione 2.0 di Moonlight. La compatibilità non è ancora al 100% ma sembra già messo molto bene e promette di anticipare alcune features presenti nella versione 3.0 di Silverlight. Tutti i dettagli su blog di Miguel: http://tirania.org/blog/archive/2009/May-04.html Technorati Tags: Moonlight 2.0,Silverlight
Nel realizzare un servizio WCF può rendersi necessario incrementare la dimensione massima degli array che vengono scambiati da e verso il servizio, un esempio comune può essere quello di volere passare al servizio un array rappresentante un immagine da memorizzare sul server. Come ho già scritto in precedenza, con Silverlight3 il default binding non è piu basicHttpBinding ma un custom binding che usa BinaryMessageEncoding, per modificare la dimensione massima degli arrays è quindi necessario aggiungere un elemento ReaderQuotas opportunamente configurato, un esempio di questa configurazione la trovate di seguito: ...
In Silverlight3 è stato semplificato il meccanismo di fruizione di servizi WCF che usano la modalità duplex, nella Beta1 c’è in realtà ancora parecchio lavoro da fare ma con la RTM il tutto si ridurrà nel aggiungere un riferimento al servizio WCF duplex e gestire l’evento generato quando il servizio ha delle informazioni da comunicare all’applicazione Silverlight. Per darvi un idea, ecco un esempio di servizio WCF che ‘pusha’ dei valori quando questi hanno un valore inferiore ad una soglia prefissata: L’interfaccia del servizio è: ...
Con Silverlight3 arrivano una lunga serie di enhancements anche per la parte webservices, tra questi l’utilizzo del BinaryMessageEncoding in sostituzione del precedente TextMessageEncoding. La nuova modalità diventa il default quando aggiungete al vostro progetto un nuovo Silverlight enabled WCF service e ha lo scopo di di diminuire la dimensione del messaggio aumentando il quindi thoughtput del server. La nuova configurazione del file Web.Config diventa quindi: 1: <bindings>
2: <customBinding>
...
Come forse saprete se avete seguito qualche presentazione al recente Mix09, in SIlverlight3 è stata introdotta una nuova interfaccia IApplicationService che permette la creazione di servizi da far partire allo startup e da stoppare quando l’applicazione sta per terminare, ad esempio perchè l’utente sta navigando verso un altro sito. Per completezza segnalo anche l’interfaccia IApplicationLifeTimeAware che permette l’esecuzione di codice durante altri eventi relativi al ciclo di vita dell’applicazione come Starting,Started,Exiting,Exited… L’uso è molto semplice, c’è però un piccolo bug (ma va? ) percui è necessario associare un x:Name al servizio quando lo si definisce nel...
Nel mio post sulle Local Connections di Silverlight3 concludevo scrivendo: “nella mia installazione, non sono supportate più istanze dello stesso receiver”. Dopo uno scambio di opinioni con qualche Insider e col team di Silverlight la risposta è stata: “Non è un bug: semplicemente non è possibile avere più istanze dello stesso receiver mentre sono supportate più istanze dello stesso sender.” La limitazione dipende dalla modalità di implementazione delle local connections (named pipes) però questo significa che se avete una pagina con due plug-in che comunicano tra loro via local connections e aprite due istanze...
Non molto tempo fa avevo mostrato come realizzare un popup modale in Silverlight2, nulla di complicatissimo ma comunque un bel pò di lavoro per visualizzare quello che nei Winforms si fa con una riga di codice. Bene, dimenticatevi tutto perchè in Silverlight3 è tutto molto più semplice grazie alle ChildWindows. Aggiungete ad un progetto Silverlight3 un item Silverlight ChildWindow e disegnatene il contenuto, by default vengono automaticamente inseriti i pulsanti Ok e Cancel, ma potete gestirli come meglio credete. Create da codice un istanza di ChildWindow, invocate il metodo...
Questa è probabilmente la feature che più mi intriga di Silverlight3 quando funzionerà a dovere (more later…) In pratica: attraverso le local connections è possibile far comunicare tra loro applicazioni Silverlight senza passare dall’ HTML bridge ma attraverso un semplice meccanismo di publish-subscribe. L’applicazione che vedete nella foto contiene due plug-ins, scrivendo nella texbox in alto il testo viene replicato nella textbox inferiore. L’applicazione Sender non fa altro che creare un istanza di LocalMessageSender indicando il nome associato al LocalMessageReceiver che sarà in grado di ricevere i messaggi inviati sottoforma di stringa (nel mio...
A volte può capitare di avere la necessità di dovere misurare le dimensioni di un testo e ritrovarsi orfani di Graphics.MeasureString/TextRenderer.MeasureText dei WinForms può portare a dei momenti di sconforto… L’equivalente WPF è: public Size Measure(string text, double fontSize, string typeFace)
{
FormattedText ft = new FormattedText(text,
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
...
Ho letto circa una tonnellata di blogs su quanto sono “fighe” (si può dire?) le Out-Of-Browser Applications di SIlverlight3, e c’è, come sempre, chi si chiede se queste possono sostituire un applicazione WPF. Sicuramente la direzione è quella (“ne rimarrà uno solo”<cit.>) ma i tempi non sono ancora maturi e non lo saranno nel breve, le implicazioni di security sono troppe e le attuali limitazioni fanno si che pensare di sostituire un applicazione full trusted con un applicazione OOB SL3 è semplicemente fuori luogo, semmai concordo che SL, sopratutto nella ultima versione, sta offuscando un area di WPF...
I pixel shaders non sono di per se una novità in quanto introdotti col SP1 di WPF, ma sono certo che acquisteranno la giusta notorietà con la loro introduzione in SIlverlight3. Se volete divertirvi a “PixelShaderare” vi segnalo Shazzam, un utility che permette di scrivere, compilare e testare i vostri pixel shaders. Per funzionare l’utility necessita del compilatore presente nel DirectX SDK che trovate qui e genera automaticamente tutto il codice necessario per utilizzare il custom shader nella vostra applicazione SL3/WPF. L’unico inghippo che ho...
Sembra che Silverlight3 abbia qualche problema col databinding…, prendiamo una classe Person che implementa INotifyPropertyChanged e supponiamo di volerne editare le proprietà Name e Age. <StackPanel>
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" />
<TextBox Text="{Binding Path=Age, Mode=TwoWay}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
nel costruttore del codebehind, come da...
Dopo l’articolo dedicato all’utilizzo di M-V-VM in WPF questo mese MSDN Magazine pubblica l’equivalente per Silverlight. http://msdn.microsoft.com/en-us/magazine/dd458800.aspx Technorati Tags: Model-View-ViewModel,Silverlight
Nuovo update per Silverlight2.0 (ormai gli acronimi si sprecano…) lo trovate qui: http://www.microsoft.com/silverlight/resources/install.aspx Update: Se, come me, non riuscite ad installarla in quanto la vostra versione “developer” non è aggiornata, usate questo link: http://go2.microsoft.com/fwlink/?LinkID=119972 Technorati Tags: Silverlight2.0 GDR1
Durante lo sviluppo di un applicazione Silverlight 2.0 è probabile che vi siate trovati di fronte alla necessità di visualizzare all’utente una dialog-window. Quello che in WPF si realizza con una semplice chiamata al metodo ShowDialog in Silverlight richiede un pò di lavoro in quanto è necessario visualizzare un popup posizionandolo sopra la finestra attuale. Visto che anche in Silverlight è applicabile il pattern Model-View-ViewModel, perchè non approfittarne? Definiamo il ViewModel che governerà la vita della nostra finestra, popup incluso: public class PopupViewModel : INotifyPropertyChanged
{
...
Per dare quel tocco di ‘eleganza’ aggiuntiva all’applicazione Silverlight che ho realizzato per un cliente ho deciso di aggungere uno splash screen che mostrasse il downdload dell’applicazione in sostituizione delle sfere rotanti utilizzate by default e, dopo qualche prova sono rimasto abbastanza deluso dalle (ovvie) limitazioni che lo splash screen di Silverlight impone, in primis, non è possibile usare nessun controllo in quanto System.Windows.Controls.dll è nello xap che non è ancora stato scaricato. Morale: Mi sono guardato in giro e ho utilizzato in alternativa il progetto su Codeplex chiamato: Silverlight Loader A parte qualche...
Silverlight utilizza, come WPF, la proprietà Name per identificare un elemento definito nello XAML, peccato che questo lo faccia automaticamente indipendentemente dal tipo di oggetto utilizzato. Supponiamo di avere questa classe: public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
e di volerla usare in uno Usercontrol Silverlight:
<UserControl x:Class="Silverlight_ToDelete.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Silverlight_Test"
Width="400" Height="300">
<UserControl.Resources>
<local:Person x:Key="person" Name="Bart" Age="13" />
</UserControl.Resources>
...
Dopo WPF Contrib, ecco l’equivalente per Silverlight ovvero: Silverlight Contrib, una gallery di controlli per Silverlight in licenza ms-pl. Per vedere i controlli all’opera cliccate qui. Technorati Tags: Silverlight,Silverlight Contrib
Se vi interessa conoscere tutti i dettagli di pagine contenenti codice Silverlight allora scaricatevi Silverlight Spy grazie al quale potrete analizzarne il logical tree, le risorse, lo XAML e modificare le proprietà dei vari visuals. Esempio: Partendo da questo XAML: <UserControl x:Class="SilverlightApplication5.Page"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="Ok" Margin="40" />
</Grid>
</UserControl>
Silverlight Spy ricostruisce:
...
"The Microsoft Health Common User Interface (MSCUI) Patient Journey Demonstrator is a vehicle for Microsoft thought leadership in state-of-the-art User Experience for Healthcare applications. It provides exemplar implementations of Microsoft Common User Interface guidance on a Microsoft platform." Volete un esempio pratico di applicazione Silverlight 2.0 e contemporaneamente un anticipo di come saranno (o almeno mi auguro siano) le applicazioni web di domani? allora cliccate qui. Technorati Tags: SIlverlight 2.0,Microsoft Healt Common user Interface
Mentre in WPF per definire uno stile implicito è sufficiente non utilizzare x:Key nella definizione dello style: <Style TargetType="{x:Type Button}">
<!--No key defined!-->
<Setter Property="Background" Value="Blue" />
<Setter Property="Foreground" Value="Yellow" />
<Setter Property="FontSize" Value="22" />
<Setter Property="FontWeight" Value="Bold" />
...
Attraverso Josh Smith vi segnalo questa piccola, ma utilissima utility, che consente di sfogliare gli stili dei controlli presenti in Silverlight 2.0. Vista l'architettura degli stili in Silverlight 2.0 (diversa rispetto a WPF) e la mancanza della feature "Create a Style Copy" in Blend 2.5 credo sia un ottimo tool per capire meglio come funzionano le cose "under the hood" Technorati Tags: Silverlight 2.0,Style browser
Quando si crea un nuovo progetto Silverlight 2.0 in Visual Studio 2008 viene creato uno Usercontrol con la dimensione 400 x 300. <UserControl x:Class="TestSL.Page"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
col risultato che il contenuto SilverLight non occupa tutta la client area del browser.
Le possibili soluzioni sono:
Eliminare la definizione di Width e Height col risultato che il designer di Visual Studio 2008 va in crisi.
Sostituire Width e Height con MinWidth e MinHeight col problema evidente quando la dimensione...
Partendo da questo post di Jeff Prosise ho perso un pò di tempo per capire perchè non funzionasse e alla fine l'unica soluzione che ho trovato è iniettare una nuova immagine nel visualtree (ma non escludo problemi alla mia macchina). Mentre facevo qualche test ho notato un piccolo bug nella Beta1 relativo a Application.GetManifestStream(); Questo codice funziona correttamente in un applicazione WPF Uri uri = new Uri("giulia3.jpg", UriKind.Relative);
StreamResourceInfo sri= Application.GetResourceStream(uri);
mentre in un applicazione Silverlight 2.0 il metodo GetResourceStream ritorna null, al momento l'unica soluzione è quella di usare il...
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"...
Per quelli di voi che hanno Webhost4Life come servizio di hosting e vogliono pubblicare la propria applicazione Silverlight 2.0, le operazioni per configurare il server sono: Attivare, ovviamente, il supporto a .NET per la directory che ospita il progetto (Io ho impostato il supporto a 3.0/3.5) Aggiungere al proprio sito il supporto all'estensione MIME xap nel pannello di controllo usando: MIME Type: application/x-silverlight-app Estensione: .xap Enjoy Silverlight 2.0 programming! Technorati Tags: Silverlight 2.0,Webhost4Life