La mia prima (semplice) applicazione in Silverlight

by Andrea 26 January 2010 06:44

Ecco la mia prima applicazione svilluppata in Silverlight. Niente di chissà che, ma almeno ho avuto modo di vedere/provare:

  • Layout - Posizionamento dei controlli. In questo caso, molto semplice, utilizzando una Grid. Silverlight Layout System
  • VisualStateManager - Utilizzato per il cambio di stato nel MouseEnter e MouseLeave nei controlli Image. Semplifica davvero di molto la gestione degli stati.
    VisualStateManager Class
  • Storyboard - Realizzazioni di animazioni per gli efetti di transizione.
    Silverlight animations
  • Styles e Resource - Inserite le proprietà comuni a più controlli all'interno delle risorse del controllo contenitore, in modo da poter cambiare l'aspetto dei controlli intervenendo in un'unico punto. Venendo dal web, questo rispecchia l'uso dei fogli di stile nelle pagine html.
    Style Class

Il codice sorgente è disponibile a questo link: Download Dottor.SocialNetworks

Ho preferito iniziare da un'applicativo semplice, in quanto è stato più chiaro (per me) capire il ruolo di ogni elemento all'interno della pagina e il rispettivo ruolo. Lo xaml finale, è risultato chiaro e di facile lettura, e spero possa essere d'aiuto anche a chi si trovasse nella mia stessa situazione, e stesse iniziando ora lo studio di Silverlight.

Tags:

ASP .NET | .NET | Microsoft

Non tutto è fattibile, ma è meglio saperlo

by Andrea 22 January 2010 08:38

Per le mie prove stò utilizzando Silverlight 3.0, e mi sono bloccato nel tentativo di fare alcune cose che credevo ovvie...modifiche che in una pagina HTML sarebbero state davvero banali. Fortunatamente è un'applicazione di test, e quindi ho la libertà di modificare/stravolgere il tutto a mio piacimento.

Text wrapText wrap. Volevo inserire un'immagine, e fare in modo che un testo occupasse il rimanente spazio, andando ad occupare anche lo spazio sotto l'immagine. Ebbene questo con la versione attuale non sembra possibile, se non facendo qualche acrocchio (del tipo dividere il testo per linee, e gestire manualmente le nuove linee). Sembra però che questa funzionalità sia presente in Silverlight 4.

Border dashed. Volevo che il solo lato destro delle celle della grid avesse il bordo tratteggiato (simile a quello che accade avendo ShowGridLines="True" in una Grid, ma per un solo lato della cella). Con il controllo Border questo non è possibile, si deve utilizzare un workaround utilizzando un Rectangle. http://forums.silverlight.net/forums/t/5574.aspx

Sono solo alcune cose (banali), ma davvero mi hanno bloccato per parecchio tempo. Ragionando nel classico modo (ASP.NET, HTML, CSS) credevo fossero fattibili e in breve tempo, mentre con silverlight mi sono trovato di fronte ad un muro.
A causa di queste problematiche ho dovuto rivedere e modificare il layout che avevo in testa, e quindi, lezione imparata...silverlight ha alcuni limiti che è bene conoscere. :-D
Ecco perchè è bene prendersi del tempo e scrivere codice, tanto codice, in modo da capire quali siano questi limiti, e conoscere per bene una nuova tecnologia/funzionalità.

Tags:

ASP .NET | .NET

Da dove cominciare con Silverlight

by Andrea 21 January 2010 02:13

images_microsoft_silverlight Da alcuni giorni ho iniziato a studiarmi Silverlight. Ho sempre seguito sessioni, articoli e blog, ma non avevo mai trovato il tempo per studiarlo come si deve, e poterlo applicare.
Esistono molte tecnologie, ogni giorno ne escono di nuove, e non è facile seguirle tutte…per questo motivo avevo sempre trascurato Silverlight, ma finalmente è arrivato il momento.

Mi sono allora posto la domanda: da dove comincio il mio studio?

Il punto di partenza è il sito stesso di silverlight http://silverlight.net, che ha una sezione apposita Learn, e per chi riesce a seguire i video in inglese, è davvero ottima.

Visto che abbiamo molte risorse in italiano, ho preferito iniziare guardando i video presenti nel percorso formativo su Silverlight che trovate a questo link, che poi sarà da approfondire e integrare con un bel pò di prove.

Silverlight - Introduzione
Silverlight - Introduzione a XAML
Silverlight - Scripting
Silverlight - Tecniche avanzate
Silverlight 2 (beta 2) – Iniziare a sviluppare
Silverlight 2 (beta 2) – Costruire la User Interface
Silverlight 2 (beta 2) – La User Interface e il DataBinding
Silverlight 2 (beta 2) - Il Networking
Silverlight 2 (beta 2) – Expression Blend 2.5 per “developer”
Silverlight 2 (beta 2) – Gestione degli errori

Per aggiornarsi poi alla versione 3.0 di Silverlight ho trovato utile i webcast presenti su BE IT
Silverlight 3.0 su BE IT fatti da Andrea Boschin e Pietro Brambati.

Silverlight 3 - Introduzione
Silverlight 3 - Out of browser experience
Silverlight 3 - Local connections
Silverlight 3 - DataBinding
Silverlight 3 - Creare immagini con le Bitmap API
Silverlight 3 - Usare Binary XML con WCF
Silverlight 3 - Creare Behaviors con Blend SDK
Silverlight 3 - Overview del ClientHttpStack
Silverlight 3 - Application Services
Silverlight 3 - Uso e personalizzazione della DataForm
Silverlight 3 - Novità grafiche: 3d transform, EasingFunctions, Effect & Shaders
Silverlight 3 - Overview delle Navigation Application
Silverlight 3 - Costruire business application

Ovviamente questi webcast offrono delle buone basi di partenza, per poi cominciare a sviluppare con Silverlight, ma c'è anche bisogno sbattere la testa direttamente nella scrittura del codice, realizzando molte (e molte) applicazione di test/esempio che permettono di prendere confidenza con xaml e con Blend.

Oltre ai webcast, consiglio di seguire e leggere anche alcuni blog:

Se avete trovato utili ulteriori risorse, non esitate a scriverlo, in quanto potrebbe essere un'informazione utile sia a me, che ad altre persone che seguono questo blog. ;-)

Technorati Tags: ,

Tags:

ASP .NET | .NET

Codice e slide della sessione Sviluppare con ASP.NET 4.0

by Andrea 10 December 2009 04:01

ASPNET_logo Ecco disponibile per il download il zip contenente codice e slide della mia sessione "Sviluppare con ASP.NET" tenuta al Community Tour 2009 a San Vito al Tagliamento il 4 dicembre 2009.

Ecco il link per il download.

Con le varie versioni del Microsoft .NET Framework, anche ASP.NET si è evoluto, e racchiude già un gran numero di funzionalità e tecnologie che coprono lo sviluppo in ambito web.In questa sessione capiremo i vantaggi che la prossima versione del Framewrok porterà con ASP.NET 4.0. La sessione non sarà solamente una carellata di nuove funzionalità, ma bensì sarà focalizzata su come la prossima release potrà aiutare lo sviluppatore nella realizzazione delle proprie applicazioni.

Le nuove funzionalità presenti in ASP.NET 4.0 le trovate elencate a questo link
ASP.NET 4 and Visual Studio 2010 Web Development Beta 2 Overview

Per qualsiasi domanda a riguardo, non esitate a contattarmi.

Tags: , , ,

XeDotNet | .NET | ASP .NET | Microsoft

Community Tour 2009

by Andrea 27 November 2009 03:19

Il 4 dicembre 2009, noi di XeDotNet in collaborazione con DotNetWorks e Powershell, ospiteremo a San Vito al Tagliamento una tappa del Community Tour 2009.

Gli argomenti che verranno trattati riguarderanno Windows 7, ed il Web, con le seguenti sessioni:

  • Windows 7 Developer Overview
    Speaker: Pietro Brambati – Microsoft Developer Evangelist
  • .NET Framework 4.0: Le novità per chi sviluppa Win Form e WPF
    Speaker: Alberto De Luca e Sabrina Cosolo – DotNetWork Founders & Community Lead.
  • Windows PowerShell 2.0: il prompt dei comandi nell'era di .NET e Windows 7
    Speaker: Efran Cobisi – Microsoft MCT & Powershell.it Community Lead
  • IIS 7.5: oltre il WEB server
    Speaker: Piergiorgio Malusardi – Microsoft IT Pro Evangelist
  • Windows Communication Foundation: normalizzare e controllare i servizi WCF
    Speaker: Davide Vernole - MVP Visual Developer ASP.NET
  • See the light... Silverlight 3.0!
    Speaker: Andrea Boschin - MVP Silverlight
  • Sviluppare con ASP.NET 4.0
    Speaker: Andrea Dottor - MVP Visual Developer ASP.NET

L'agenda completa è presente a questo link Agenda Community Tour 2009, mentre per registrarsi all'evento il link è il seguente Registrazione Community Tour 2009
LOCATION: Centro Direzionale Ponterosso - San Vito al Tagliamento (PN)
ORARIO: 08:45 - 17:30

Per quanto mi riguarda, terrò la sessione Sviluppare con ASP.NET 4.0 che riguarderà le novità presenti in ASP.NET 4.0, ed i vantaggi/migliorie che porteranno a noi sviluppatori (facilitandoci di molto la vita).

Con le varie versioni del Microsoft .NET Framework, anche ASP.NET si è evoluto, e racchiude già un gran numero di funzionalità e tecnologie che coprono lo sviluppo in ambito web.In questa sessione capiremo i vantaggi che la prossima versione del Framewrok porterà con ASP.NET 4.0. La sessione non sarà solamente una carellata di nuove funzionalità, ma bensì sarà focalizzata su come la prossima release potrà aiutare lo sviluppatore nella realizzazione delle proprie applicazioni.

Tags: , , ,

ASP .NET | Microsoft | XeDotNet

Microsoft MVP ASP.NET…rinnovato!!

by Andrea 01 October 2009 07:51

MVP_logo

Da pochi minuti ho ricevuto la conferma del mio rinnovo come Microsoft MVP ASP.NET.

E' il mio secondo award, e quindi il mio primo rinnovo…ma ho vissuto la giornata esattamente come un anno fa…in trepidante attesa di quella mail, che poteva anche non arrivare mai. E credetemi che è un'attesa infinita.

MVP Open Days 2009Sono veramente felice di essere stato rinnovato, perchè in quest'ultimo anno ho avuto modo di crescere ulteriormente grazie anche a questo premio e alle persone che il programma MVP riesce ad unire.

Un grazie sincero a tutte le persone che mi fanno capire quanto sono appassionato a questo mondo...da chi incontro agli eventi di XeDotNet, a chi scrive nei forum e nei newsgoup…in modi differenti, ma avete sempre stimolato la mia voglia di crescere e di diffondere quel poco che so. ;-)

Ma il più importante ringraziamento (doveroso) va a Maria Elena (la mia fidanzata), per la pazienza che ha nei miei confronti nel permettermi di seguire le mie innumerevoli attività ed impegni.

Grazie!!

Tags: , ,

Microsoft | +1 | .NET | ASP .NET

DynamicData e ColorPicker FieldTemplates

by Andrea 16 September 2009 03:17

Con i Dynamic Data la velocità di realizzare l'applicazione aumenta notevolmente (ovvio che dipende sempre dal tipo di applicazione che si deve realizzare) e con la creazione di FieldTemplates di ha la possibilità di migliorare l'iterazione tra applicazione e utente.

Una delle necessità che ho avuto è stata quella di dover far inserire il valore in esadecimale di un colore (es: #FFFFFF), e consapevole del fatto che un utente non potesse conoscere i valori a memoria, mi sono adoperato per realizzare un opportuno FieldTemplate.
L'ultima versione degli AJAX Control Toolkit mi è venuta in aiuto grazie al controllo ColorPicker che è stato recentemente incluso, ed ecco qui il risultato ottenuto:

ColorFieldTemplate

Il codice del FieldTemplate è il seguente:

   1: public partial class Color_EditField : FieldTemplateUserControl
   2: {
   3:     protected override void ExtractValues(IOrderedDictionary dictionary)
   4:     {
   5:         dictionary[Column.Name] = ConvertEditedValue(txtColor.Text);
   6:     }
   7:  
   8:     public override Control DataControl
   9:     {
  10:         get { return txtColor; }
  11:     }
  12: }
   1: <%@ Control Language="C#" CodeBehind="Color_Edit.ascx.cs" Inherits="DynamicData.FieldTemplates.Color_EditField" AutoEventWireup="True" %>
   2:  
   3: <asp:ImageButton 
   4:     runat="Server" 
   5:     ID="btnOpenColorPicker" 
   6:     style="float:left;margin:0 3px" 
   7:     ValidationGroup="none" 
   8:     ImageUrl="~/images/cp_button.png" 
   9:     AlternateText="Click to show color picker" />
  10: <asp:Panel 
  11:     runat="server"
  12:     ID="pnlColor" 
  13:     style="width:18px;height:18px;border:1px solid #000;margin:0 3px;float:left" />
  14: <atk:ColorPickerExtender 
  15:     runat="server"
  16:     ID="colorPicker"     
  17:     TargetControlID="txtColor" 
  18:     PopupButtonID="btnOpenColorPicker" 
  19:     SampleControlID="pnlColor" 
  20:     PopupPosition="Absolute" />
  21: <asp:TextBox ID="txtColor" 
  22:     runat="server" 
  23:     Text='<%# FieldValueEditString %>' 
  24:     style="visibility:hidden;" />

Nella mia applicazione non avevo la necessita di visualizzare il codice del colore (che compare nella TextBox), ma nel caso a qualcuno interessasse, sarà sufficiente togliere lo stile "visibility:hidden;" dalla TextBox txtColor.

Tags: ,

ASP.NET AJAX | ASP .NET | .NET

ASP.NET Ajax Control Toolkit e DynamicPopulateExtenderControlBase

by Andrea 14 September 2009 06:51

Stavo introducendo il controllo HoverMenuExtender all'interno di uno UserControl e nell'intellisense mi compaiono alcune proprietà che mi risultano "anomale" per il controllo che stavo per utilizzare. Anomale nel senso che non mi aspettavo proprio di trovare tali proprietà in questo controllo.
HoverMenuExtender 
Le proprietà in questione sono quelle che hanno il suffisso Dynamic: DynamicContextKey, DynamicControlID, DynamicServiceMethod e DynamicServicePath.

Visto che (dal nome) potevano fare al caso mio, guardo la documentazione online, e scopro che non esiste documentazione a riguardo. Allora, come spesso accade, scarico i sorgenti degli ajax control toolkit e do un'occhiata al codice per capire dove fossere utilizzate e a cosa servissero. Ed è qui che sono rimasto sorpreso.

I controlli HoverMenuExtender, DropDownExtender, ModalPopupExtender e PopupControlExtender derivano dalla classe base DynamicPopulateExtenderControlBase, che contiene per l'appunto queste proprietà:

  • DynamicServicePath: url del web service che conterrà il metodo da chiamare. (lasciare vuoto se si intende chiamare un page method)
  • DynamicServiceMethod: metodo del web service da chiamare.
  • DynamicContextKey: permette di definire un parametro opzionale per parametrizzare il metodo chiamato. (parametro opzionale)
  • DynamicControlID: id del controllo che verrà utilizzato come container per iniettare il codice HTML restituito dal metodo.

Utilizzando queste proprietà è possibile utilizzare un metodo (DynamicServiceMethod) di un web service (DynamicServicePath) per farsi ritornare una porzione di condice HTML, che verrà poi iniettato in un preciso controllo (DynamicControlID).

Per provare se il tutto funziona correttamente, la via più semplice è quella di provare il tutto.
Creo un metodo in un web service che restituisca una porzione di codice HTML:

   1: [WebMethod]
   2: [ScriptMethod]
   3: public string GetHoverMenuContent(string contextKey)
   4: {
   5:     return String.Format("<span style='{0}'>Hello World!</span>", contextKey);
   6: }

e nella pagina vado a inserire il controllo, con le proprietà correttamente valorizzate:

   1: <ajax:HoverMenuExtender 
   2:     ID="hoverMenuExtender"
   3:     runat="server"
   4:     TargetControlID="linkButton" 
   5:     PopupControlID="Panel1" 
   6:     PopupPosition="Right" 
   7:     DynamicControlID="Panel2"
   8:     DynamicContextKey='font-weight:bold' 
   9:     DynamicServiceMethod="GetHoverMenuContent" 
  10:     DynamicServicePath="~/ajax.asmx" />
  11:  
  12: <asp:Panel ID="Panel1" runat="server" style="display:none;">
  13:   <asp:Label ID="Panel2" runat="server" />
  14: </asp:Panel> 

Il risultato che ho ottenuto è stato esattamente quello voluto, e quindi che al passaggio del mouse sopra al linkButton (o al controllo definito nella proprietà TargetControlID), è stato chiamato il metodo del web service, passando nel parametro contextKey il valore specificato nella prorietà DynamicContextKey (in questo caso il valore è fisso a font-weight:bold), e una volta ritornato il codice HTML, questo è stato inserito come innerHTML del controllo Panel2, e il Panel1 reso visibile.

In poche parole, tramite queste proprietà si ha la possibilità di popolare i controlli con maggiore dinamicità, e delegando la creazione di parte del contenuto HTML ad un metodo esterno. Questo in molti casi risulta veramente utile, permettondo con poche righe di codice di ottenere il comportamento/effetto voluto, e dimostrando per l'ennesima volta la flessibilità dei controlli contenuti negli AJAX Control Toolkit.

Tags: ,

ASP.NET AJAX | ASP .NET | .NET

Gestione commenti su BlogEngine.NET

by Andrea 20 August 2009 08:26

Una mancanza che ho sempre trovato in BlogEngine.NET era di non avere una gestione centralizzata dei commenti. Per cancellare o approvare un commento si doveva necessariamente farlo dalla pagina del post, che comportava il conoscere esattamente dove fosse stato postato quel commento (link che viene comunicato via mail).

Scaricando l'ultima versione presente in codeplex, nella sezione Source Code(in quanto non è ancora stata rilasiata una release ufficiale) è stata aggiunta la possibilità di visualizzare e gestire i commenti direttamente dalla sezione Admin del proprio blog.
Da questa sezione è possibile infatti visualizzare tutti i commenti, approvarli in caso di moderazione attiva, cancellarli e modificarli (cosa che invece non approvo molto).

La sezione è ancora in fase di sviluppo, me devo ammenttere che funziona perfettamente ed è una grande comodità.

La versione iniziale di BlogEngine.NET che include questa funzionalità è la 1.5.1.17.

Technorati Tags: ,

Tags:

ASP .NET | .NET | Sito

Visualizzare e nascondere un PopupControlExtender da una funzione server side

by Andrea 20 July 2009 08:55

Qualcuno ha posto la domanda, se fosse possibile visualizzare o nascondere un popup creato con il PopupControlExtender direttamente da una funzione server side.

A differenza del ModalPopupExtender, PopupControlExtender il  non dispone di queste funzionalità server side, ma con poche righe di codice si può aggirare la problematica.

Per fare questo dobbiamo valorizzare la proprietà BehaviorID dell'extender:

   1: <ajax:PopupControlExtender 
   2:   ID="popup"
   3:   runat="server" 
   4:   BehaviorID="popupExt" ... />

utilizzando i metodi client showPopup e hidePopup, possiamo registrare uno script che si occupi di far visualizzare o nascondere il popup. Lo script utilizzerà la funzione $find per cercare l'extender all'interno del DOM della pagina, e successivamente verrano chiamate le funzioni showPopup oppure hidePopup esposte dallo script dell'extender.

Grazie al metodo RegisterStartupScript esposto dallo ScriptManager possiamo registrare lo script che immadiatamente verrà eseguito alla fine del postback.

   1: // visualizzare il popup
   2: ScriptManager.RegisterStartupScript(this, this.GetType(), "showPopup", "$find('popupExt').showPopup();", true);
   3:  
   4: // nascondere il popup
   5: ScriptManager.RegisterStartupScript(this, this.GetType(), "hidePopup", "$find('popupExt').hidePopup();", true);

 

Tags: ,

.NET | ASP .NET | ASP.NET AJAX