Vortrag WPF Tipps, Tricks und „best practices“

Friday, November 21, 2008 11:52:29 AM (Mitteleuropäische Zeit, UTC+01:00)

Den zweiten Tag des Technical Summits habe ich mit dem Vortrag WPF Tipps, Tricks und „best practices“ begonnen. Alexander Strauß (Architekt bei Microsoft) stelle verschiedene Do’s und Don`ts für die WPF Entwicklung vor.

P1010008

Die wichtigsten Do’s stichpunktartig:

  • in der Applikation die Rendering Tier abfragen und darauf reagieren[1]
  • Tools zur Performance Messung während der gesamten Entwicklung verwenden und Ergebnisse überwachen [2]
  • Text decoration und Transparenz sparsam einsetzen (Rendering Tier beachten)
  • Verwendung von MVC Patterns
  • Verwendung von Commands anstatt von einfachen Events beim Einsatz von Copy, Paste, Undo und Redo
  • Einsatz von Triggern zur Trennung von UI und Logik
  • Verwendung von Templates anstatt von Usercontrols
  • Bitmap Effekte sparsam verwenden, weil die meisten zur Zeit noch per Software gerendert werden
  • Zusammenfassung von Ressourcen an einer zentralen Stelle in der Application
  • Verwendung von Snoop um den Visual Tree zu untersuchen [3]


Don`ts:

  • keinen Code schreiben, der Rückschlüsse auf den Visual Tree zieht
  • keine aufwändigen Operationen im UI Thread ausführen (nichts neues in WPF)

Fazit: Ein guter Vortrag um die Performance in eigenen WPF Anwendungen zu steigern.

[1] http://msdn.microsoft.com/de-de/library/system.windows.media.rendercapability.tier.aspx
[2] http://msdn.microsoft.com/en-us/library/aa969767.aspx
[3] http://blois.us/Snoop/

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Das .NET BlogBook in geht in die 6. Runde

Monday, April 14, 2008 9:44:06 PM (Mitteleuropäische Sommerzeit, UTC+02:00)

Alle 3 Monate gibt es eine neue Version vom .NET BlogBook. Von Version zu Version werden nicht nur Fehler korrigiert, es kommen selbstverständlich neue Artikel von Kai Gloth und Norbert Eder hinzu.
Heute ist das .NET BlogBook in der 6. Ausgabe erschienen.
Es wurde mit Artikeln aus den Bereichen WPF und .NET Framework bereichert.

Der Download lohnt sich für jeden praxisorientierten .NET Entwickler.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Visual Studio 2008 – Meine Highlights

Wednesday, November 21, 2007 12:38:40 AM (Mitteleuropäische Zeit, UTC+01:00)

Nein, ich möchte nicht den einhundertsten Blogeintrag schreiben, dass das Visual Studio 2008 released wurde.
Vielmehr möchte ich meine persönlichen Highlights aufzählen:

Javascript-Degugger: Ab sofort braucht man keine Tools wie Firebug oder Fiddler mehr.

XAML Designer: unverzichtbar für die Entwicklung von WPF Anwendungen

Umschaltbare Frameworkversion: man kann zwischen den Versionen 2.0, 3.0 und 3.5 auswählen.

ASP.NET Vorschau beschleunigt:

Endlich muss man nicht mehr ewig warten, wenn von der Quellansicht zur Entwursansicht umgeschaltet wird.

Wer die vielen neuen Features in deutsch ausprobieren möchte, muss sich noch bis Anfang nächsten Jahres gedulden.
Die englischen Expressversionen gibt es hier.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


WPF Expander um Animation erweitern

Wednesday, November 07, 2007 10:04:20 PM (Mitteleuropäische Zeit, UTC+01:00)

Ich habe hier kürzlich den WPF Expander vorgestellt. Mit wenigen Zeilen Code kann man den Expander um eine kleine Animation erweitern.
Mit Hilfe dieser Animation wirkt das auf und zuklappen sanfter, wie man es zum Beispiel vom ASP.NET Ajax Control CollapsiblePanel kennt.

Der folgende XAML Code zeigt, dass auf die beiden RoutedEvents Expander.Expanded (wird beim aufklappen gefeuert) und Expander.Collapsed (wird beim zuklappen gefeuert) reagiert werden muss.
Die Animation wird im StoryBoard mit nur 5 Parametern deklariert:

<Expander Name="AnimatedExpander" Background="Wheat" IsExpanded="True" Header="Information" BorderThickness="3" BorderBrush="DarkBlue" Padding="5" FontFamily="Verdana" Width="250">
    <StackPanel Background="AntiqueWhite">
        <Label Foreground="Red">Lorem ipsum</Label>
        <TextBlock Margin="5" TextWrapping="Wrap">
            Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed ...
        </TextBlock>
    </StackPanel>
    <Expander.Triggers>
        <EventTrigger RoutedEvent="Expander.Expanded">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard >
                        <DoubleAnimation From="40" To="220" Storyboard.TargetName="AnimatedExpander" Storyboard.TargetProperty="Height" Duration="0:00:00.5"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions> 
        </EventTrigger>
        <EventTrigger RoutedEvent="Expander.Collapsed">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard >
                        <DoubleAnimation From="220" To="40" Storyboard.TargetName="AnimatedExpander" Storyboard.TargetProperty="Height" Duration="0:00:00.5"/>                 
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Expander.Triggers>
</Expander>

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Hochstapeln mit dem Stackpanel

Tuesday, November 06, 2007 11:38:36 PM (Mitteleuropäische Zeit, UTC+01:00)

Das Stackpanel ist sicher eins der am meist benutzen Layoutcontainer in der WPF.
Leider bietet das Stackpanel keine Möglichkeit zu scrollen wenn sich zu viele Controls im Stackpanel befinden.
Abhilfe schafft die ScrollViewer Komponente in die das Stackpanel eingebettet werden muss:

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
    <StackPanel>
        <Button Height="50" Name="button1" Width="100">Button</Button>
        <Button Height="50" Name="button2" Width="100">Button</Button>
        <Button Height="50" Name="button3" Width="188">Button</Button>
        <Button Height="50" Name="button4" Width="100">Button</Button>
    </StackPanel>
</ScrollViewer>

Standardmäßig ist nur die vertikale Scrollbar sichtbar, die horizontale Scrollbar muss mit dem Attribut HorizontalScrollBarVisibility sichtbar geschaltet werden.

Stackpanel

Selbstverständlich gilt das auch, wenn die Controls im Stackpanel horizontal angeordnet sind ( Orientation="Horizontal" ).

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Cooles WPF Control: der Expander

Tuesday, November 06, 2007 11:04:42 PM (Mitteleuropäische Zeit, UTC+01:00)

In der WPF gibt es einige neue Controls, zum Beispiel den Expander.
Ich finde damit kann man nette Sidebars im XP-Style erstellen:

ExpanderExpand 
auf ..

ExpanderCollapsed 
.. und zugeklappt

XAML Code für dieses Beispiel:

<Expander Background="Wheat" IsExpanded="True" Header="Information" BorderThickness="3" BorderBrush="DarkBlue" Padding="5" Width="250">
    <StackPanel Background="AntiqueWhite">
        <Label Foreground="Red">Lorem ipsum</Label>
        <TextBlock Margin="5" TextWrapping="Wrap">
            Lorem ipsum dolor sit amet, cons...
        </TextBlock>
    </StackPanel>
</Expander>

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


DoEvents() in WPF

Sunday, November 04, 2007 3:26:59 PM (Mitteleuropäische Zeit, UTC+01:00)

Wer beginnt, mit der WPF Anwendungen zu entwickeln, wird sicher hin und wieder einige Methoden vermissen die unter WinForms selbstverständlich waren.
So musste ich heute feststellen, dass die Methode Application.DoEvents() in der WPF nicht zur Verfügung steht.
Nach kurzem googlen habe ich hier ein Hack gefunden.  Diese Lösung funktioniert recht gut, jedenfalls solange man nicht versucht die Form zu schließen während die Methode gerade abgearbeitet wird. Um eine NullReferenceException beim Schließen der Form zu vermeiden, habe ich eine Abfrage auf Null hinzugefügt:

public static void DoEvents()
{
    if (Application.Current != null)
        Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
}

Eine weitere Möglichkeit, die Methode verfügbar zu machen, ist das Hinzufügen einer Referenz auf den .NET Namespace System.Windows.Forms

AdReference

Dann kann die Methode mit

System.Windows.Forms.Application.DoEvents();

aufgerufen werden.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de