www.planet-xaml.net
 
  • [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
  •  ^
  • I've updated my article on the textured triangle control for the new Beta 2 of Silverlight 2. Luckily, only a few changes were necessary:

    OnApplyTemplate has become public, the PropertyChangedCallback must be wrapped into PropertyMetaData for DPs and, XAML-wise the TileMode set on the ImageBrush had to go.

    The greatest positive surprise in Beta 2 to me is the Visual State Manager addition. I'm very happy with what Microsoft is doing here. Tackling the complexity of the WPF/Silverlight stack by adding higher levels of abstraction is really key for the platform to get wider acceptance, especially among designers.
    Chris Schormann has a bunch of valuable posts about VSM.

    I'm thinking about another article on The Codeproject, bringing Silverglobe (still Beta 1) and textures together. I have a prototype running already.

    Cheers,
    Florian


    3 comments
  •  ^
  • The Flash community has been playing with dynamically generated audio for quite a while. For example Andre Michelle has a whole lab with fascinating audio stuff. He and other guys have gained enough momentum to convice Adobe to add advanced support for audio synthesis into the next Flash player.

    I was wondering, if it is possible to build a dynamic audio synthesizer in Silverlight 2 and what it might take, so I did a little bit of investigation. To make it short, in Beta 1 you can't really do it... but it's close, so close that I hope that Microsoft might listen and add the last few extra meters.

    Here's how I thought you could implement it: Silverlight PM Joe Stegman posted in his blog a way to dynamically create images in Silverlight and load them into an Image object using the SetSource method. It turns out that the MediaElement object also has a SetSource method that can be passed a video or audio stream.

    Bingo, you might think. Just write a little library that creates an audio stream, pass that stream to the MediaElement and have fun. Now, here comes the bummer: MediaElement only supports WMA and MP3 audio codecs, it does not support wav or wma lossless. WAV audio would be straight forward to create and encode on the fly, but with WMA and MP3 there's no easy way, licensing and patent issues aside.

    I image that adding wav support would be a piece of cake, although I'm aware that deployment size and testing have to be taken into consideration. But adding that little feature would open up a whole world for the creative community. Yep, that's right... it is important to get the creative community interested Silverlight. The enterprise will embrace it anyway.

    Cheers,
    Florian


    2 comments
  •  ^
  • [MIX08]

    MIX'08 Session Videos - Reloaded

    by Florian Krüsch, May 16, 2008

    Für alle, die nicht auf der MIX'08 waren oder es, wie ich, nicht geschafft haben alle interessanten oder relevanten Talks zu sehen, gibt es Online Videos der Sessions und Panels unter: http://sessions.visitmix.com/

    Via Scott Hanselman ist zu erfahren, daß diese Videos jetzt in einer neuen, verbesserten Version zur Verfügung stehen, in der nicht nur Slides/Demos, sondern parallel auch die Sprecher selbst als Video zu sehen sind.

    Inhaltlich bietet das zwar nichts neues, bringt aber die Atmosphäre besser rüber und wirkt irgendwie natürlicher. Die Session von Scott Hanselman zu ASP.NET MVC kann ich in dem Zusammenhang besonders empfehlen, Scott ist ein wahrer Entertainer.

    Cheers,
    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.