blog.troelsrichter.dk
alt mellem bits og bytes

How to add MouseDoubleClick events to Silverlight 4

Tuesday, 9 November 2010 22:18 by dommer

In Silverlight 4 there is no support for mouse double click events. The best work around from my point of view is to implement a double click behavior that exposes a double click event.

This is how the Xaml will look like if you want something to happen when a user double clicks on a grid:


<Grid>
  <Interactivity:Interaction.Behaviors>
    <MouseDoubleClickBehavior MouseDoubleClick="Grid_MouseDoubleClick" />
  </Interactivity:Interaction.Behaviors>
</Grid>

It is by far a beautiful programmer experience but I think it is the best solution as it is right now.

The source code behind the MouseDoubleClickBehavior can be found below:

 public class MouseDoubleClickBehavior : Behavior<FrameworkElement>

    {
        public event EventHandler<EventArgs> MouseDoubleClick;
        private readonly DispatcherTimer timer;

        public MouseDoubleClickBehavior()
        {
            timer = new DispatcherTimer() {Interval = new TimeSpan(0, 0, 0, 0, 200) };
            timer.Tick += timer_Tick;
        }

        void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
        }

        protected override void OnAttached()
        {
            base.OnAttached();
            this.AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;
        }

        void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (timer.IsEnabled)
            {
                OnMouseDoubleClick();
            } else
            {
                timer.Start();
            } 
        }

        virtual protected void OnMouseDoubleClick()
        {
            if (MouseDoubleClick != null)
            {
                MouseDoubleClick(this, new EventArgs());
            }
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();
            this.AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown;
            timer.Stop();
        }
    }

 

If you use this remember to add a reference to System.Windows.Interactivity.dll which can be found in the Expression Blend SDK

Tags:   ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

ShellLight udgivet på codeplex.com

Sunday, 28 February 2010 11:47 by dommer

Både hos Trifork og min forrige arbejdsplads TDC har jeg primært arbejdet med administrative løsninger der har skulle lette arbejdsgangen med en brugervenlig UI som omdrejningspunkt.

En af de store udfordringer har altid været at få UI'en til at virke overskuelig selvom der konstant har været nyudvikling på systemet. I starten virker systemet hurtigt og overskueligt, men efterhånden begynder mængden af funktionalitet at tage til og man begynder både som udvikler og bruger at miste overblikket. Efterhånden som kodelinjerne bliver flere tager det også længere tid at tilføje nye skærmbilleder, da man måske ikke længere har en helt konsistent måde at gøre dette på og skærmbilledet skal kunne tilgås mange steder fra.

Ovenstående var hovedmotivationen for at lave en Shell hvori ovenstående forhåbentlig ikke vil ske. Som udvikler skal det overtid være super simpelt at tilføje nye skærmbilleder og som bruger må du ikke miste overblikket og skal hurtigt kunne tilgå den ønskede funktionalitet.

ShellLight er til Silverlight løsninger og bygger på version 4, da jeg nu mener Silverlight er på et stadie hvor det teknisk er muligt at lave de applikationer jeg har arbejdet på de sidste 9 år.

Hvordan?

Ovenstående er mit Windows 7 desktop (jeg ér blevet drillet med den maskuline baggrund) og efter jeg har fået windows-7 er jeg blevet utrolig glad for den måde man søger sine programmer frem på. Tanken om at man ikke kan organisere sig til et overblik man kan navigere i men hellere beder om det man har brug for tror jeg på.

Tanken er ført videre til ShellLight som foreløbig ser således ud:

Ud over ShellLight launcheren er der selvfølgelig flere krav til en Shell som jeg ikke vil komme ind på her og nu. Tankegangen er at starte fra brugerens perspektiv og tilføje features der giver slutbrugeren værdi og dernæst at gøre det så simpelt som for udvikleren som muligt. Jeg tror ikke dette bliver et framework med uanede muligheder, men snarere nogle fornuftige begrænsninger.

Se mere på http://shelllight.codeplex.com

Tags:   ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (255) | Comment RSSRSS comment feed

gå-hjem-møde: Silverlight 4 som line-of-business framework?

Friday, 8 January 2010 21:57 by dommer

Den 26. og 28. Januar skal jeg sammen med en kollega http://nlbeck.dk/ holde gå-hjem-møde hvor vi vil give en introduktion til Silverlight 4 og vurdere des kunnen som et framework til at lave administrative forretningsapplikationer i.

Jeg håber det bliver rigtig spændende og håber på du kommer og hører med.

Læs mere og registrer dig her;

Århus 26. Januar 16-18 

Tåstrup 28. Januar 16-18

god fornøjelse!

Tags:   , ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (91) | Comment RSSRSS comment feed

www.tomatoday.dk

Thursday, 31 December 2009 14:34 by dommer

Pomodoro-teknikken og Silverlight er to af de mest lærerige bekendtskaber jeg har gjort i 2009. En kombination af disse er blevet til www.tomatoday.dk, hvilket er et værktøj bestående af en timer og en opgaveliste (Activity Inventory i pomodoro-termer) der begge er værktøjer der benyttes i pomodoro.

Selvom teknikken beskriver at papir, pen og et æggeur er den bedste løsning har jeg haft større succes med en online timer kombineret med husk.venligst.dk.

Nu har jeg med hjælp fra et par kollegaer udviklet denne lille applikation, som forhåbentlig kan hjælpe dig der arbejder efter pomodoro-teknikken og gerne vil have lidt hjælp fra din computer.

Både timer og inventory kan med et enkelt klik installeres som applikation således den bliver lettere tilgængelig end gennem browseren.

Applikationen er udviklet gennem mit arbejde hos Trifork, hvor vi hvert år har et par dage i en spejderhytte hvor man har frie muligheder for at dyrke noget af det som hverdagen ikke tillader. Jeg må så indrømme at de to dage ikke var nok, så det er blevet lidt til et fritidsprojekt :)

Jeg har selv brugt systemet i et godt stykke tid og synes det fungerer ganske godt. Alt efter hvordan andre vil bruge det og deres feedback bliver vil nok komme til at afgøre tomatodays fremtid.

Men prøv det sammen med teknikken, det kan anbefales :)

Den gode applikationsstak

Brugergrænsefladen er bygget med Silverlight og det primære look and feel kommer gennem et Theme fra silverlight toolkittet kaldet Expression Dark. Største problemer i Silverlight-delen har helt klart været fokusproblemer og at få styles til at slå igennem når man begynder at ændre på kontrollers indhold, som ellers skulle være en af Silverlights styrker. Tilmed er der gjort en del benarbejde for at lave en rimelig museuafhængig løsning.

Kommunikationslaget er WCF gennem http uden brug af proxyklasser. Fra applikationens side kommunikere man gennem  nogle selvdefinerede beskeder som kan sendes til serveren gennem en tynd hjælpeklasse kaldet MessageClient.

Serveren har en enkelt beskedservice der står for at finde en handler til den enkelte besked. Det vil også sige en 100% custom-løsning, men stadig ret slim i designet synes jeg.

Servicen får hjælp af Castle Windsor som IOC Container til at finde implementeringer af handlers samt repositories, hvilket gør at man som udvikler ikke behøve at binde disse ting sammen når man laver nye handlers og repositories.

Brugen af IOC har nok været den største øjenåbner for mig på tekniksiden i 2009. Det er første gang jeg selv sætter en løsning sammen med IOC fra bunden.

Som persistens-lag benyttes NHibernate, men ikke i dens originale lidt besværlige form. Overbygningen FluentNHibernate er benyttet med den AutoPersistanceMapping, som gør det muligt at lave en meget transperant mapping, da denne mapper danner de kedelige XML-mapping filer uden man benhøver tænke på det. Det man skal forholde sig til er nogle konventioner som den i stedet bruger til at kunne afgøre en mapning. Jeg tror meget på convension over configuration så det er perfekt!

Tilmed har jeg brugt LinqToNHibernate, så jeg ikke går glip af den dejlige syntax-sukker :)

Med LinqToNHibernate og FluentNHibernate synes jeg virkelig HNivernate har fået nyt liv hvilket det har trængt til fra mit synspunkt, så det er jeg glad for. Et framework som man stadig synes er godt efter 4-5 år… hvor tit sker det?

SQLite benyttes til Unit-Tests  for hurtig afvikling og MySQL i produktion

pt., men Postgres har også været benyttet. Unit-test er skrevet med NUnit samt RhinoMocks.

Der logges med Log4Net og det var vist også det. Alt i alt nok det billede jeg har af frameworks og produkter til en god applikationsstak. Det er dog også en meget traditionel arkitektur med en tynd klient og en server – ingen cloud tankegang for mit vedkommende i 2009.

Som i kan høre er det helt klart også et omstændigt setup for så lille en applikation. Men tanken med dette lille projekt var også at tænke på det som en applikationsstak til en forretningsapplikation med Silverlight som UI.

Tomatoday referencer

Nyhed på triforks hjemmeside

Nyoprettet pomodoro-gruppe på version2

Godt nytår allesammen!

Tags:   ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (84) | Comment RSSRSS comment feed

Interview om skiftet fra udvikler til leder

Monday, 14 December 2009 13:07 by dommer

Den 15. september 2009 blev jeg interviewet af Søren Spelling Lund fra Århus .NET Usergroup omkring det at gå fra at være udvikler til leder. Mange udviklere har garanteret stået overfor dette valg eller pludselig fundet sig selv i denne rolle - til jer kunne dette måske være et interessant interview. Tror ikke jeg kan lære jer noget, men nogle gange er det også bare rart at vide at der er andre i samme båd :)

I dag udkom dette interview, så her kan i høre om nogle af mine overvejelser og tanker i den forbindelse.

http://www.anug.dk/post/2009/12/13/ANUGCast-60-Fra-udvikler-til-leder-med-Troels-Richter.aspx

Tags:   , ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (133) | Comment RSSRSS comment feed

Fluent NHibernate med Linq og MySQL i Medium Trust

Monday, 7 December 2009 19:54 by dommer

Jeg er i gang med at udvikle en Silverlight applikation, hvor jeg gerne vil vise at applikationsstakken ikke nødvendigvis behøver være Microsoft bare fordi front-enden er det.

Så nu hedder applikationsstakken WCF som kommuikationslag, Castle Windsor som IOC/DI Container, Log4Net som logger, Fluent Nhibernate med NHLinq som OR-mapper og til sidst MySQL som primær Database provider, men SQLite til ”Unit-Test” samt i udviklingsmiljø.

Den positive nyhed først: ”Løsningen kører nu i medium trust i shared hosting”, men jeg har haft stærkt brug for min stædighed for at nå dertil :)

Grunden til at jeg bliver nød til at skrive herom er at jeg endnu ikke er løbet på andre der har kunnet sige dette samme  - i hvert fald ikke om FluentNHibernate.

Moralen til jer der ikke har lyst at læse om detaljerne er en gammel kending: ”Kend dit deployment miljø og release dertil fra start”. Det var ikke oprindeligt planen at løsningen skulle releases i shared hosting, så for mig har det været et dejligt lille eventyr på bagkant, som jeg gerne ville have løst undervejs i små bider. I nævnte applikationsstak har jeg haft udfordringer med samtlige bestanddele hvilket også har overrasket mig en del.

Medium trust

Hos de billigere hosting-udbydere vil dine applikationer som regel kun få lov at køre under et begrænset sikkerhedsniveau ide der hostes mange løsninger på samme maskine. De fleste tillader ikke mere end medium-trust, hvor det første du skal sikre dig er:

[assembly: AllowPartiallyTrustedCallers]

For at et assembly overhovedet får lov til at blive loaded af .NET-runtimet som kører i medium trust er det et krav at alle assemblies er kompileret med attributten AllowPartiallyTrustedCallers.

Nemmeste måde at tjekke det på er ved hjælp af reflector:

Castle Windsor kan bygges i en mode hvor dette flag sættes, MEN! Der vil stadig være et problem med dynamicProxy som muligvis er løst hvis du tjekker trunk versionen ud og bygger den. Men det jeg endte med at gøre var at hente denne version. Det opløftende her var at jeg fandt løsningen hos Martijn Boland, som var den første der udviklede et CMS Cuyahoga som kunne køre på MONO. Det  brugte jeg selv for nogle år siden – både til egen side og en løsning jeg lavede til en motorcykel-forhandler.

Fluent NHibernate er afhængig af NHibernate som er afhængig af Castle Windsor. Derfor måtte jeg tjekke kildekoden ud til FluentNNHibernate samt Linq og kombilere disse op imod NHibernate 2.1.2.4 overskrevet med omtalte version af Castle. Den stabile version af NHibernate havde et problem i kombination med MySQL.

Der ud over måtte jeg slå reflection optimizeren fra i FluentNHibernate, selvom Martijn ikke nævner at have gjort dette.

Environment.UseReflectionOptimizer = false;

Men jeg har på fornemmelsen at Automapperen i FluentNHibernate benytter denne på en måde så det går galt. Her gav jeg op i at finde en begrundelse men var bare glad for at jeg ikke skulle ændre andet :)

MySQL 6.2.1.0 benyttede jeg i den binære udgave og virkede med ovennævnte udgave af NHibernate.

Log4Net loggede intet i starten. Dette skyldes at der på sektioner i web.config tilmed skal sættes trust-level:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" allowDefinition="Everywhere"/>

Tilmed er APP_DATA bedste folder til formålet. Det er ikke altid du får lov at skrive andre steder.

SQLite kan ikke køre i medium trust, da den er afhængig af en native win32 dll som godt nok er indeholdt i System.Data.SQLite.DLL. Da jeg kun bruger SqLite til udvikling og test var dette ikke noget stort problem. Dog har jeg måtte undgå referencen fra mit projekt til denne dll og isedet kopiere den ind i bin output bin mappen efter behov. For bare det at den ligger i bin mappen ved deployment giver problemer.

Shared Hosting og WCF

I et shared hosting setup kan der være flere baseadresser der peger på samme ressource. Dette kan give problemer som gør at WCF ikke kan instanciere din sevice host. Min løsning var at implementere min egen ServiceHostFactory.

Puha. Selvom jeg har undladt en masse detaljer føler jeg trætheden kommer i gang fra dengang jeg brugte adskillige timer på disse problemer. Så derfor understrejer jeg lige igen. Nu virker det!

Selvom der har været en del problemer synes jeg alligevel også det er fedt, at man rent faktisk kan få en professionel applikationsstak op og køre i et billigt shared hosting enviroment. Så med denne post i baghånden er der ingen undskyldning for ikke at bruge alle de lækre open source komponenter der ligger derude og venter på at blive downloaded :)

Tags:   , ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (216) | Comment RSSRSS comment feed

Silverlight 4 Beta på gaden

Thursday, 19 November 2009 11:23 by dommer

Idag er Silverlight 4 beta frigivet med et sæt af nye spændende features. Jeg kender ikke til andre produkter i Microsofts historie med en release cycle på omkring 1 år, hvilket bevidner om hvor meget Microsoft skyder i denne teknologi.

Umiddelbart introducere Silverlight 4 ikke noget revolutionerende, men en lang række ønsker fra kunder og udviklere der idag benytter silverlight.

Her følger en række links fra Tim Heuers blogindlæg om silverlight 4, der beskriver de enkelte emner rigtig godt.

Jeg har fremhævet de emner som jeg finder mest interessante.

Til folk der hellere vil hører Tim Heuer fortælle om de nye features vil jeg anbefale dette podcast fra Sparkling Client.

Jeg glæder mig til at prøve nogle af de nye features af, for deres success handler meget om brugen heraf. At lukke op for Evaluated Trust gør Silverlight til en teknologi som på sigt vil kunne bruges på lige fod med Adobe Air, men samtidig er det en svær balancegang, da en af grundideerne i silverlight er at applikationerne skal kunne isntalleres smertefrit og med tryghed hos brugeren. Denne tryghed er svær at forene med Evaluated Trust (Full Trust), men giver flere muligheder.

Så nu må vi se om mulighederne overskygger trygheden - det håber jeg!

Tags:   ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (415) | Comment RSSRSS comment feed

WCF uden brug af proxyklasser i silverlight3 - part3 - messageclient

Monday, 9 November 2009 08:28 by dommer

I det tredie og foreløbige sidste afsnit er strukturen i min service lavet lidt om til en mere message baseret form.

Servicen har kun en enkelt metode som står for at sende en besked videre til en handler. Brugen fra klienten er inspireret af object client (fra part2), men på en typestærk facon.

wcf_uden_brug_af_proxyklasser_i_silverlight3_part_3_message_service.swf

Jeg programmerer idag efter nævnte arkitektur, og er rimelig godt tilfreds. Dog må jeg også erkende at der nu er indført så meget arkitektur, at løsningen nok skal holdes op imod f.eks. Ria Services, hvilket er Microsofts kommende bud på at lave et smidigt kommunikationslag i line of business sammenhæng.

Tags:   , ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (127) | Comment RSSRSS comment feed

Pomodoro-foredrag på afdelingsmøde hos Datea

Sunday, 1 November 2009 16:43 by dommer

I onsdags var jeg indlægsholder på et afdelingsmøde hos Datea. Jeg gav en introduktion til pomodoro-teknikken gennem en beskrivelse af egne erfaringer. Datea er i byggebranchen hvilket gjorde det ekstra spændende for mig. Det var en utrolig positiv oplevelse og lovede at gøre materialet tilgængeligt.

Derfor tak for snakken Datea, her er materialet:

troels_richter_fra_udvikler_til_leder_med_pomodoro_teknikken_v2

Tags:  
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (51) | Comment RSSRSS comment feed

WCF uden brug af proxyklasser i silverlight3 - part2 - objectclient fra netfxharmonics

Friday, 23 October 2009 10:53 by dommer

Den 17. September afholde Århus .NET Usergroup DevDays hvor Thomas Juul fra Tenteo afholdte et godt indlæg omkring Silverlight i Line og Business sammenhæng. En lille del heraf var brugen af en lille klient wrapper til at kalde ens WCF services med.

Denne har jeg selv afprøvet og her er min vurdering heraf:

wcf_uden_brug_af_proxyklasser_i_silverlight3_part_2_objectclient_fra_netfxharmonics.swf

Jeg kan allerede nu afsløre at jeg ikke er helt tilfreds, så har arbejdet videre med en ny løsning.

Fortsættelse følger...
Tags:   , ,
Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (85) | Comment RSSRSS comment feed