Kolumne: XAML Expertise

WPF Silverlight Silverlight for Windows Phone und Metro-Style-Apps [Teil 2]
Kommentare

Liebe Leserinnen und Leser, in den zwei Jahren „Silverlight Expertise“ hat sich die Welt um XAML weitergedreht. XAML wurde mit WPF eingeführt. Dann folgte eine plattformübergreifende Lösung mit Silverlight. Kaum war Silverlight ausgereift, floss diese Technologie auch noch auf die mobilen Windows-Phone-Geräte. Bei der Workflow Foundation kann zudem die Geschäftslogik durch XAML beschrieben werden. Nun ist Windows 8 im Kommen und es zeigt uns, dass XAML für Metro-Style-Apps auch eine wichtige Rolle spielen wird. XAML ist somit ein guter Standard für viele Lösungen geworden. Aus diesem Grund wird die Kolumne „Silverlight Expertise“ durch „XAML Expertise“ erweitert und in Zukunft aus jeder Technologie abwechselnd ein paar How-tos präsentieren. Heute gibt es folgende Expertise: „Silverlight Pixel-Shader“, „Data Binding besser debuggen“ und „Die MessageBox unter WinRT“. Viel Spaß mit XAML Expertise.

Silverlight 3: Pixel-Shader

Pixel-Shader sind kompilierte Softwareanweisungen, die die Farbe der Pixel berechnen. Die Berechnung findet auf der GPU statt. Die Anweisungen sind in HLSL (High Level Shader Language) geschrieben. Pixel-Shader ermöglichen die Entwicklung von benutzerdefinierten Effekten. Alle Elemente, die von UIElement abgeleitet werden, haben das Effect-Property, das das Rendern vom Element mit dem angebundenen Pixel-Shader ermöglicht. Ab Silverlight 3 sind zwei integrierte Pixel-Shader enthalten: Blur und Drop Shadow. Beide Effekte können in der System.Windows.Media.Effects-Bibliothek gefunden werden. Listing 1 demonstriert die Deklaration im XAML und Abbildung 1 verdeutlicht das Ergebnis.

Listing 1: Der DropShadowEffect unter Silverlight


          
        
  
  

Abb.1: Das Ergebnis vom DropShadowEffect unter Silverlight
Abb.1: Das Ergebnis vom DropShadowEffect unter Silverlight
WPF: Data Binding besser debuggen

Wenn beim Data Binding etwas nicht stimmt, wird im Hintergrund eine Exception ausgelöst. Diese wird allerdings nur im Output-Fenster beim Debuggen sichtbar. Die Informationen sind mit einer Zeile sehr knapp gehalten und bei User Controls anderer Hersteller oft undurchschaubar. Mit einem kleinen Trick wird der Sache nachgeholfen. Mithilfe der Klasse System.Diagnostics.PresentationTraceSources kann man sich mehrere Infos zum Binding anzeigen lassen. Diese wird als Attached-Property beim Data Binding deklariert (Listing 2). Als TraceLevel-Optionen stehen Low, Medium und High zur Verfügung. Beim Debuggen folgen nun detaillierte Informationen im Output-Window. Ein Beispiel dazu zeigt Listing 3.

Listing 2: PresentationTraceSources für mehr Details beim Data-Binding

  
Listing 3: Beispielausgabe vom Output-Window beim Debuggen

System.Windows.Data Warning: 54 : Created BindingExpression (hash=59515852) for Binding (hash=42860424)
System.Windows.Data Warning: 56 : Path: 'Value.Kennzahl'
System.Windows.Data Warning: 58 : BindingExpression (hash=59515852): Default mode resolved to OneWay
System.Windows.Data Warning: 59 : BindingExpression (hash=59515852): Default update trigger resolved to PropertyChanged
System.Windows.Data Warning: 60 : BindingExpression (hash=59515852): Attach to ....KennzahlUserControl.... (hash=53940693)
System.Windows.Data Warning: 65 : BindingExpression (hash=59515852): Resolving source 
System.Windows.Data Warning: 68 : BindingExpression (hash=59515852): Found data context element:  (OK)
System.Windows.Data Warning: 70 : RelativeSource.TemplatedParent found CellValuePresenter (hash=64084771)
System.Windows.Data Warning: 76 : BindingExpression (hash=59515852): Activate with root item CellValuePresenter (hash=64084771)
System.Windows.Data Warning: 105 : BindingExpression (hash=59515852): At level 0 using cached accessor for CellValuePresenter.Value: DependencyProperty(Value)
System.Windows.Data Warning: 102 : BindingExpression (hash=59515852): Replace item at level 0 with CellValuePresenter (hash=64084771), using accessor DependencyProperty(Value)
System.Windows.Data Warning: 99 : BindingExpression (hash=59515852): GetValue at level 0 from CellValuePresenter (hash=64084771) using DependencyProperty(Value): 'Text'
System.Windows.Data Warning: 106 : BindingExpression (hash=59515852): At level 1 - for String.Kennzahl found accessor 
System.Windows.Data Warning: 106 : BindingExpression (hash=59515852): At level 1 - for EnumerableCollectionView.Kennzahl found accessor   
Metro-Style-App: Die MessageBox unter WinRT

Die MessageBox existierte bereits beim klassischen Visual Basic und überlebte bis heute in WPF und Silverlight. Doch unter der Windows Runtime (WinRT) hat sich einiges geändert. Aus der MessageBox wurde ein MessageDialog (Abb. 2). Optisch informiert er den Anwender nun flächendeckend, technisch werden alle zusätzlichen Funktionen via Commands gesteuert und der Dialog wird asynchron ausgeführt. Listing 4 zeigt den Sourcecode für einen Abfragedialog. Wichtig bei der Methodenbeschreibung ist die zusätzliche Deklaration von async. Bei der Instanziierung vom MessageDialog werden der Titel und der Inhalt gesetzt. Für jeden weiteren Button wird ein UICommand zu der Commands-Liste hinzugefügt. Der UICommand erhält ebenfalls eine Instanz von UICommandInvokedHandler. In dessen Konstruktor folgt dann der Text vom Button und ein Delegate. Beim Aufruf von ShowAsync muss vorher mittels await ein Wiedereinstiegspunkt für den asynchronen Vorgang gesetzt werden. Nach der Antwort vom Anwender wird das Delegate gefeuert und dann beim await fortgesetzt.

Listing 4: Der MessageDialog unter WinRT

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
  bool result = false;
  
  MessageDialog messageDialog = new MessageDialog("Sind Sie sich sicher?", "Frage");
  messageDialog.Commands.Add("OK", new UICommand(new UICommandInvokedHandler(x => result = true)));
  messageDialog.Commands.Add("Abbrechen", new UICommand(new UICommandInvokedHandler(x => result = false)));
  
  await messageDialog.ShowAsync();
  
  if(result)
  {
    // OK wurde bestätigt
  }
}  

Abb.2: Der MessageDialog unter WinRT
Abb.2: Der MessageDialog unter WinRT
Gregor Biswanger ist Microsoft MVP für Client App Dev und arbeitet als Solution Architect und XAML-Experte in der Firma impuls Informationsmanagement GmbH in Nürnberg. Seine Schwerpunkte sind die .NET-Architektur, Silverlight und agile Prozesse. Er veröffentlichte vor Kurzem seine DVD mit Videotrainings zum Thema „WPF 4 und Silverlight 4“ bei Addison-Wesley von video2brain. Biswanger ist auch freier Autor, Speaker und Microsoft CLIPler der INdotNET (Ingolstädter .NET Developers Group). Sie erreichen seinen Blog unter www.dotnet-blog.net.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -