Überblick über die wichtigsten und interessantesten Neuerungen in der fünften Silverlight-Version

Silverlight Give me five!
Kommentare

Microsoft hat endlich die fünfte Version für Silverlight 5 zur Verfügung gestellt. Neben bereits seit längerem bekannten Features wie das XAML Binding Debugging, eigene Markup Extensions, implizite Data Templates oder 3-D-Unterstützung, bietet Silverlight 5 weitere Neuerungen wie vertrauenswürdige Applikationen im Browser, die aus .NET bereits bekannten „P/Invoke“-Aufrufe mittels „DllImport“-Attribut oder das vektorbasierte Drucken. Dieser Artikel gibt einen kurzen Einblick in die Topfeatures von Silverlight 5.

Die fünfte Version bringt vielversprechende Neuerungen mit. In fast jedem Bereich ist etwas dabei. Während der eine Entwickler sehnlichst auf 3-D-Unterstützung in Silverlight gewartet hat, freut sich ein anderer über die Unterstützung von eigenen Markup Extensions. Einen der Höhepunkte stellen vermutlich die Erweiterungen bei vertrauenswürdigen Anwendungen dar. Vom uneingeschränkten Dateizugriff bis hin zur P/Invoke-Unterstützung ist alles dabei, um Silverlight perfekt in Windows zu integrieren. Doch auch hier ist Vorsicht geboten, da durch P/Invoke-Aufrufe natürlich die Crossplatform-Funktionalität eingeschränkt wird. P/Invoke-Aufrufe funktionieren selbstverständlich nicht unter Mac OS. Auch die lokale Druckunterstützung wurde überarbeitet. Vektorbasiert ist sie in Version 5 weitaus performanter als die bitmap-basierte Variante aus Silverlight 4. Im Control-Bereich gibt es von der einfachen Unterstützung für Doppelklicks bis hin zum komplexeren PivotViewer-Element zum Betrachten von relationalen Daten ebenso interessante Neuigkeiten. Damit hat Microsoft mit Version 5 von Silverlight die zentralen Punkte umgesetzt, die von der Community gefordert wurden [1]. Es ist an der Zeit, den RC runterzuladen, zu installieren und die neuen Möglichkeiten auszuprobieren. Los geht’s!

XAML Binding Debugging

Das erste in diesem Artikel beschriebene Topfeature ist das Debuggen von Data Bindings in XAML. In Silverlight 5 lassen sich direkt im XAML-Codefenster in gewohnter Manier auf der linken Seite Breakpoints via Mausklick oder durch Drücken der F9-Taste erstellen (Abb. 1). Die Vorgehensweise ist exakt gleich wie im C#/VB.NET-Codeeditor. Voraussetzung in XAML ist allerdings, dass die entsprechende XAML-Zeile ein Data Binding enthält. Zur Laufzeit hält der Debugger wie erwartet an dem Breakpoint an. Im Locals-Fenster lassen sich in diesem Zustand alle Details des verwendeten Binding-Objekts betrachten. Unter anderem ist daraus ersichtlich, welche Daten hin- und hergeschoben werden (Abb. 2). Während in Silverlight 4 ein Blick ins Ausgabefenster für Details zum Data Binding notwendig war, findet der Entwickler in Silverlight 5 alles im Locals-Fenster beim Stoppen auf einem Breakpoint.

Abb. 1: Breakpoint in XAML
Abb. 1: Breakpoint in XAML

Abb. 2: Details des Bindings im Locals-Fenster
Abb. 2: Details des Bindings im Locals-Fenster

Eigene Markup Extensions

Besonders auf Silverlight umgestiegene WPF-Entwickler freuen sich über die Möglichkeit, jetzt auch in Silverlight eigene Markup Extensions erstellen zu können. Wie bei der WPF wird dazu eine Subklasse von MarkupExtension (Namespace: System.Windows.Markup) erstellt und die abstrakte ProvideValue-Methode überschrieben. Aus ihr wird der Wert zurückgegeben, den die Markup Extension bereitstellt. In der ProvideValue-Methode lassen sich über die als Parameter erhaltene IServiceProvider-Instanz das Zielobjekt und die Zieleigenschaft ermitteln, auf die die Markup Extension angewandt wurde. Dazu wird auf der IServiceProvider-Instanz die GetService-Methode aufgerufen und als Typ das Type-Objekt des IProvideValueTarget-Interfaces übergeben. Rückgabewert ist dann eine IProvideValueTarget-Instanz, die die Properties TargetObject und TargetProperty enthält (Listing 1). Die via IServiceProvider-Instanz ermittelte Zielinstanz und -Property sind nicht immer erforderlich. Eine typische, aus der WPF bekannte, aber in Silverlight fehlende Markup Extension ist die StaticExtension. Sie lässt sich recht einfach implementieren (Listing 2). In der ProvideValue-Methode wird via Reflection die statische Property ausgelesen und zurückgegeben. Die StaticExtension lässt sich in XAML mit den geschweiften Klammern einsetzen, um auf eine statische Property zuzugreifen. Listing 3 zeigt, wie die Extension genutzt wird, um den Wert der statischen DateTime.Now Property in einem ContentControl anzuzeigen.

Listing 1
public override object ProvideValue(IServiceProvider serviceProvider)
{
  var provideValueTarget =
    (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
  object target = provideValueTarget.TargetObject;
  object targetProperty = provideValueTarget.TargetProperty;
  ...
}
  

Listing 2
public class StaticExtension : MarkupExtension
{
  public string Source { get; set; }
  public string PropertyName { get; set; }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    var type = Type.GetType(Source);
    var propertyInfo = type.GetProperty(PropertyName, BindingFlags.Public | BindingFlags.Static);
    return propertyInfo.GetValue(null, null);
  }
}
  

Listing 3

  

  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -