www.planet-xaml.net
  •  

    WPF

    Windows Presentation Foundation

    • Besser spät als nie, hier liegen die Slides zu meinem Vortrag beim NRW'08 Community Event über WPF und Silverlight zum Download bereit.

      Zwei Demos habe ich auch noch auf den Server gepackt:
      Hier liegt das Beispiel für ein Custom Window mit aufgehübschtem Message-Popup.

      Die Europakarte als gestylete ListBox findet Ihr hier.

      Viel Spass damit,
      Florian


      no comments
    •  ^
    • [WPF]

      Waiting until a template is loaded in WPF

      by Florian Krüsch, September 18, 2008

      I ran into this while implementing a dialog inside a Popup. Popups are interesting, because they are part of the logical and visual tree, yet they render into a different HWND. Anyway, the problem was I needed to give the dialog keyboard focus when it opens, but at that time the control template isn't even expanded yet.

      Looking at Ben Carters excellent ScrollViewer Preview ToolTip I found a neat way to handle this and wrapped it into an extension method:

      C#toggle
      public static class Extensions
      {
         public static void InvokeWhenLoaded<T>(this T obj, Action action) 
            where T : DependencyObject
         {
            obj.Dispatcher.BeginInvoke(action, DispatcherPriority.Loaded);
         }
      }
      // Usage:
      if (isOpen) 
         win.InvokeWhenLoaded(() => win._dialog.Focus());

      Basically this adds the action into the Dispatcher Queue which will invoke it the next time the Dispatcher is finished loading controls. At this time the template is expanded and you can savely set focus on child elements.

      If you thought Dispatcher.BeginInvoke is just about UI-thread marshalling you're as wrong as I was :)

      Cheers,
      Florian


      no comments
    •  ^
    • [WPFSilverlight]

      NRW'08 - WPF und Silverlight in der Praxis

      by Florian Krüsch, September 11, 2008

      Die Sommerpause ist vorbei und morgen gehts auf zum NRW'08 Community Event, wo ich einen Vortrag zu "WPF und Silverlight in der Praxis" halten darf. Es geht um WPF und Silverlight und um gesammelte Tips aus der Praxis, z.B.

      • Wie organisiert man Resourcen?
      • Wie verbiegt man ListBoxen?
      • Was sind die Unterschiede zwischen WPF und Silverlight?
      • Wie integriert man 3D in WPF und Silverlight(!)


      Ich freue mich auf den Event und vor allem darauf, viele Leute aus der Community mal persönlich kennenzulernen.


      no comments
    •  ^
    • [WPFBlendXAML]

      WPF Projekte strukturieren: Resourcen

      by Florian Krüsch, June 27, 2008

      Eine Frage, die mir immer wieder gestellt wird ist, "Wie strukturiert man größere WPF Projekte?". Diese Frage muss man zunächst mal eingrenzen - geht es um die Architektur (Programmstruktur) oder um die Strukturierung der WPF spezifischen Assets (Controls, Styles, Bilder etc). Das ist eine Frage, die vor allem auch für Designer relevant ist.

      Architektur

      Die Frage nach der Architektur lässt sich sicher nicht ad-hoc beantworten. Es gibt Referenz-Architekturen wie Composite WPF (Prism) für Composite Smart Clients (Business Anwendungen, die sich aus verschiedenen unabhängigen Teilen zusammensetzen) oder Entwurfsmuster wie MVC und M-V-VM, die Ihre Stärken und Schwächen haben.

      Wie auch immer die Architektur im Detail aussieht, man sollte in der Präsentationsschicht die Stärken von WPF (DataBinding, Templates)nutzen und nicht dagegen arbeiten.

      Design Resourcen

      Die Strukturierung von Design-Resourcen dagegen ist eine Sache, die man sehr gut verallgemeinern kann. Die Struktur, die ich immer wieder erfolgreich für Projekte einsetze, basiert im Großen und Ganzen auf Paul Stovell's exzellenten XAML and WPF Coding Guidelines.
      Ich will hier nicht den Inhalt des Artikels wiedergeben, sondern auf die Dinge eingehen, die ich ein bischen anders mache:

      Resource-DLLs: wir packen i.d. Regel alle Resourcen in ein eigenes Projekt/DLL. Das hat den Vorteil, daß der Designer zum Testen ein eigenes, separates Projekt nutzen kann, das wie die eigentliche Anwendung die Resource-DLL einbindet.

      StaticResources: es stimmt, daß StaticResources eine Performance Verbesserung bringen. Andererseits wird damit die Reihenfolge, in der Resource Dictionaries eingebunden werden, auf einmal kritisch. Blend kommt damit oft nicht gut klar. Ich rate mittlerweile dazu, erst kurz vor Schluss von DynamicResource auf StaticResource umzustellen.

      Namenskonventionen:

      • Die PART_ Konvention ist nur für Teile (Parts) von Control Templates gedacht.
      • Für andere Namen (nicht zu verwechseln mit Resource-Keys) wählt man besser die selben Bezeichner, die man auch in C# benutzen würde und verwendet das x:Name Attribut zusammen mit x:FieldModifier.

      Resource Dictionaries: Was in Flash die Bibliothek ist, sind in WPF und Silverlight die Resource Dictionaries.
      Ich halte es für eine gute Idee, Resource Keys zu verwenden, die mit dem Filesystem übereinstimmen.
      Z.B. x:Key="Shared/Brushes/Background" Entsprechend würde ich die Datei dann auch Brushes.xaml statt BrushResources.xaml nennen.

      Wie bei der Implementierung selbst auch, ist die Bezeichnung von Resourcen eine sehr wichtige Sache und es zahlt sich aus, dabei sorgfältig vorzugehen.
      Ich würde bei der Namen-Wahl immer vom Verwendungszweck ausgehen:
      Z.B. statt
      x:Key="Brush_TransparentBlue
      besser:
      x:Key="Shared/Brushes/DialogButtonBackground


      Es ist sicher nicht immer einfach, so einen systematischen Aufbau im Team durchzusetzen und aufrecht zu erhalten, aber spätestens in der Wartungsphase oder nach dem Urlaub wird es sich auszahlen.

      Viel Spass,
      Florian


      no comments
    •  ^
    • [WPFXAML]

      .NET 3.5sp1 - der "Real Deal" für WPF

      by Florian Krüsch, May 14, 2008

      Wie die Zeit vergeht - es ist bereits vier Jahre her, daß ich mich mit den ersten Avalon CTPs herumgeschlagen habe. ["Avalon" war der Codename für die Windows Presentation Foundation]. Eine hardwarebeschleunigte Grafikplattform, die 3D, Video, Vektorgrafik, Controls und vieles mehr in sich vereint, war damals ein Versprechen, dem ich mich nicht entziehen konnte. Zumal ich gerade von Flash auf ASP.NET umgesattelt hatte, was wohl irgendwie mit dem Älterwerden zu tun hatte.

      In einem Channel 9 Interview erklärte Karsten Januszewski, auf die Frage was denn das besondere an WPF sei: "If you can think it up, you can probably pull it off." Was wohl soviel heißen sollte, wie "Jedes Userinterface, das Du Dir vorstellen kannst, kannst Du mit WPF wahrscheinlich irgendwie umsetzen".

      Ich habe dann im Folgenden an einigen wirklich ambitionierten WPF Projekten mitwirken dürfen, wie z.B. dem OTTO Vista Store, einer Anwendung für TV Responsemessung und einer Software-plus-Service artigen Consumer Anwendung für die Massen. Diese Anwendungen basierten alle auf .NET 3.0 und damit auf der ersten Version von WPF.

      Einige meiner hohen Erwartungen haben sich tatsächlich erfüllt, mit WPF konnte ich ein Listbox Control zu einem 3D-Kartenstapel umbauen, 3D Visualisierung auf Videos legen usw. aber es sind auch ein paar Wünsche offen geblieben und es gibt Dinge die sich mit der ersten Version noch nicht wirklich gut umsetzen ließen:

      • Interaktive Controls auf 3D Flächen
      • Videos mit Alphakanal
      • Interaktion mit HTML Content
      • schnelles Bitmap-Drawing
      • Aus-Blurren von Elementen im Hintergrund
      • ein Office Ribbon als Menü
      • hardwarebeschleunigtes 3D in transparenten Fenstern

      All diesen Anforderungen bin ich tatsächlich begegnet und alle sind mit .NET 3.5 und jetzt mit dem Service Pack umgesetzt bzw. richtig einfach geworden!

      Ein allgemeiner Punkt war auch immer wieder die Performance, die einfach "noch nicht ganz da" war, einfaches Deployment für Windows XP und viele Kleinigkeiten, wie z.B. Databinding von Alternating Rows oder String-Formattierungen. Alles fertig und gefixt!

      Ich bin wirklich begeistert und freue mich trotz all der Aufregung um Silverlight und Live Mesh wieder richtig auf mein nächstes WPF-Projekt.

      Weiterführende Links sind bei Rob Relyea zu finden. Ich hatte auf der MIX'08 seinen Vortrag über die kommenden Verbesserungen in WPF gesehen. Er hat fleissig alle Anregungen aus dem Publikum notiert. Vielleicht werden die geäußerten Featurerequests dann in WPF v4 integriert.

      Have fun,
      Florian


      no comments
    •  ^
     

Language | Sprache

All[e]  |  english  |  deutsch
Tags
 

Profile

Florian Kruesch

I am working as a freelance software architect, developer and consultant in Düsseldorf, Germany.

My focus is on Microsoft technologies and .NET 3.0, especially WPF, ASP.net and SQL Server.

I've been a lead programmer on the WPF development of the OTTO Vista Store at SinnerSchrader Studios.

My client list includes DHL, LG and Ogilvy Interactive.