Silverlight Toolkit (av Team Silverlight)

Av Andreas Paulsson 16. June 2009, 10:10
Visa profil för Andreas Paulsson

Efter mycket om och men har jag och Lars svetsat ihop en Silverlight toolkit som vi hoppas kommer att bli användbar vid Silverlight-utveckling.

Projektet/komponenten består idag av fyra delar:

  • CssHandler
    Detta är en klass som klarar av att läsa en .css fil och applicera en rad egenskaper på komponenter som är specade i xaml.
    Den här klassen kommer att förändras inom kort så se till att komma tillbaks och titta efter uppdateringar.
  • Login
    En login komponent som klarar av att autentisera en användare och returnera ett användarobjekt som du själv skapat. Den använder sig ab ServiceCaller.
  • RightClick
    Möjlighet att ta över högerklicket i xaml och visa upp din egen contextmenu. Här medföljer även en enkare meny att fylla med innehåll och visa upp.
  • ServiceCaller
    Den asynkrona anropshanteraren som beskrivits här tidigare.

Vårt toolkit samt ett exempelprojekt finns att ladda hem från: http://www.synaptic.se/tools.aspx

Ha en bra dag!

Tags: , , , ,

Silverlight

Styling

Av Andreas Paulsson 27. May 2009, 11:17
Visa profil för Andreas Paulsson

I Silverlight är det som bekant enkelt att ändra utseende på kontroller, men ett dilemma som jag ofta hamnar i är att jag duplicerar stylingen.
Ett botemedel på det är att lägga dessa styles i app.xaml och på så sätt göra dem globala i applikationen.

Jag kanske sparkar in öppna dörrar nu, men jag det här sättet att skriva styles på är väldigt kraftfullt.
Bifogar ett exempel att titta på: SilverlightStyling.zip (39,38 kb)

Mer om detta kommer inom kort. Jag och Lars har diskuterat hur man skulle kunna göra detta ännu mera kraftfullt samt att underlätta för designers som inte är utvecklare.

Tags: ,

Silverlight

Logon komponent

Av Andreas Paulsson 8. May 2009, 08:13
Visa profil för Andreas Paulsson

Just nu känns det lite som när Jim Carrey upptäcker att han har en massa krafter i filmen "Bruce Almighty".
Efter att jag fick till min hantering av asynkrona anrop med hjälp av reflection gjorde jag om en annan av
mina pryttlar som jag ständigt återanvänder. Nämligen en inloggningskomponent.

Det jag hade tidigare var ett någorlunda enkelt projekt att uppdatera, men jag hade två starka beroenden.

Det första var såklart en referens till servicen som autentiserar användaren.
Det andra var returtypen (som av någon anledning aldrig ser likadan ut fast att det alltid handlar om inloggning...)

Jag tog helt enkelt min ServiceCallerHandler som jag beskrivit i inlägget "En hanterare för asynkrona anrop" och
gjorde om inloggningen så att det enda den känner till är vad serviceanropet heter. Resten är magi.

Kolla ett exempel: LogOnExample.zip (777,65 kb)

Tags: , ,

Silverlight

En hanterare för asynkrona anrop

Av Andreas Paulsson 6. May 2009, 15:13
Visa profil för Andreas Paulsson

Lars och jag satt och pratade om möjligheten att göra service anropen i silverlight enklare.

Inte för att det i sig är speciellt svårt, men min erfarenhet är att koden gärna blir lite grötig efter ett tag.

En inte alltför ovanlig syn i mina projekt är något i stil med det här:

private void SetEventHandlers()
{
    ServiceClient.GetABunchOfIntsCompleted += new EventHandler<GetABu....
    ServiceClient.GetCitiesCompleted += new EventHandler<GetCitiesCom....
    ServiceClient.GetUserInfoCompleted += new EventHandler<GetUserInf....
    ServiceClient.GetUserInfoListCompleted += new EventHandler<GetUse....
}
 
private void LoadMyBaseData() 
{
    ServiceClient.GetABunchOfIntsAsync(25);
    ServiceClient.GetCitiesAsync();
    ServiceClient.GetUserInfoAsync("Andreas", "Paulsson");
    ServiceClient.GetUserInfoListAsync();
}
 
void ServiceClient_GetUserInfoListCompleted(object sender, GetUserInfoListCompletedEventArgs e)
{
    //Do something intelligent
}
 
void ServiceClient_GetCitiesCompleted(object sender, GetCitiesCompletedEventArgs e)
{
    //Do something intelligent
}
 
void ServiceClient_GetABunchOfIntsCompleted(object sender, GetABunchOfIntsCompletedEventArgs e)
{
    //Do something intelligent
}
 
void ServiceClient_GetUserInfoCompleted(object sender, GetUserInfoCompletedEventArgs e)
{
    //Do something intelligent
}

Vi började diskutera möjligheten att skapa en klass som helt enkelt löser anropen åt oss och som kan meddela när jag
fått det data som jag behöver för att applikationen ska kunna fungera.

Lösningen blev ett recept med instruktioner.
Bifogat finns en zipfil med exempelkod att ladda hem.

Det man gör är att skapa en ny instans av Recipe klassen med en ny instans av service klienten i konstruktorn. Skapa ett
event för onLoaded och börja fylla på listan med instruktioner.
Anropa StartLoad och vänta.
Med det här angreppet kan jag skriva kod som ser ut mer såhär:

private void LoadData()
{
    MyBaseRecipe = new Recipe(ServiceClient, "BaseRecipe");
    MyBaseRecipe.onLoaded += new EventHandler(MyBaseRecipe_onLoaded);
 
    MyBaseRecipe.AddInstruction("GetCitiesAsync", new List<string>(), new List<object>());
    MyBaseRecipe.AddInstruction("GetABunchOfIntsAsync", new List<int>(), new List<object>() { 25 });
    MyBaseRecipe.AddInstruction("GetUserInfoAsync", new UserInfo(), new List<object>() { "Andreas", "Paulsson" });
    MyBaseRecipe.AddInstruction("GetUserInfoListAsync", new List<UserInfo>(), new List<object>());
 
    MyBaseRecipe.StartLoad();
}

På det här viset kan jag “släcka ner” applikationen under laddning på ett snyggare sätt utan att behöva använda fulflaggor osv.

Ha en fortsatt bra dag!
/Andreas

 SilverlightAsyncCallerHandler.zip (678,58 kb)

Tags: , , ,

Silverlight

Timers i Silverlight

Av Andreas Paulsson 31. March 2009, 18:03
Visa profil för Andreas Paulsson

Ett försök att visa hur man kan använda timers i Silverlight för att uppdatera värden i en ASP sida.

Hemligheten ligger i DispatcherTimer som finns i System.Windows.Threading namespacet.

Ladda hem och titta på exempelprojektet.

Tags: , ,

Silverlight

Silverlight till ASP kommunikation och vise versa

Av Andreas Paulsson 31. March 2009, 17:47
Visa profil för Andreas Paulsson

För en tid sedan hamnade jag i ett läge där jag behövde kunna påverka variabler i en ASP sida
från en Silverlight applikation.

Efter lite letande på nätet hittade jag ett inlägg i ett forum som fick mig i rätt riktning.

Det hela var ganska enkelt visade det sig.

HtmlPage.Document.GetElementById("htmlText").SetProperty("innerText", this.SLTextBox.Text);

När problemet var löst var jag helt enkelt tvungen att ta reda på hur enkelt det är att påverka variabler/kontroller
från ASP till Silverlight.
Till att börja med måste man dekorera sin klass man vill ska vara synlig med attributet [ScriptableType].
Därefter måste alla metoder som ska vara åtkomliga dekoreras med attributet [ScriptableMember].
Dessa finns i namespacet System.Windows.Browser.

När detta är gjort behöver man registrera sin klass i ASP sidan när den skapas.

        public Page()
{
InitializeComponent();
//Enables Javascript in ASP page to trigger events in this Silverlight app
HtmlPage.RegisterScriptableObject("SLASP_Comm", this);
}

Från ASP sidan kan man nu enkelt köra metoder i sin Silverlight applikation

     function htmlButtonClick2() {
try
{
var app = document.getElementById("Xaml1").Content.SLASP_Comm;
var daBos = document.getElementById("SomeText");
app.htmlClick2(daBos.value);
}
}
 

Bifogar exempelprojekt att ladda ner.

Tags: ,

Silverlight


Show all members