Silverlight Give me five! (Teil 2)
Kommentare

Implizite DataTemplates
Für Objekte, die nicht vom Typ UIElement sind, lässt sich mit einem DataTemplate auch ein Aussehen definieren. Dazu wird ein DataTemplate üblicherweise als logische Ressource

Implizite DataTemplates

Für Objekte, die nicht vom Typ UIElement sind, lässt sich mit einem DataTemplate auch ein Aussehen definieren. Dazu wird ein DataTemplate üblicherweise als logische Ressource erstellt und beispielsweise zur Resources Property der MainPage hinzugefügt. In Silverlight 4 musste ein DataTemplate aus den Ressourcen explizit mit der Markup Extension StaticResource referenziert werden. In Silverlight 5 gibt es die impliziten DataTemplates. Sie müssen nicht referenziert werden, sondern werden implizit auf den in der DataType Property angegebenen Typen angewandt. Listing 4 zeigt den Konstruktor der MainPage einer Silverlight-Anwendung. Darin wird eine Liste mit drei Personenobjekten dem DataContext der MainPage zugewiesen. Im XAML-Teil der MainPage bindet sich eine ListBox an die im DataContext enthaltene Personenliste (Listing 5). In der Resources Property ist ein DataTemplate definiert. Dessen DataType Property enthält den Typen Person. Somit werden alle sich in der ListBox befinenden Personen automatisch mit dem im DataTemplate definierten Aussehen dargestellt (Abb. 3).

Listing 4
public MainPage()
{
  InitializeComponent();
  this.DataContext = new List
  {
    new Person{FirstName="Thomas",LastName="Huber"},
    new Person{FirstName="Bill",LastName="Gates"},
    new Person{FirstName="Steve",LastName="Jobs"},
  };
}
  

Listing 5

  
    
      
        
        
      
    
  
  

  

Abb. 3: Personen werden dank impliziten DataTemplate anders dargestellt
Abb. 3: Personen werden dank impliziten DataTemplate anders dargestellt

3-D

Silverlight 5 bietet native 3-D-Unterstützung. Das Ganze basiert auf den aus dem XNA-Framework bekannten Klassen. In Silverlight 5 RC kam nun unter anderem auch die Math-Klasse aus dem Namespace Microsoft.Xna.Framework dazu, die Berechnungen mit Vektoren und Matrizen kapselt. Somit entfällt eigener Code oder eine Drittherstellerbibliothek, die speziell diese in der 3-D-Welt immer wiederkehrenden Berechnungen durchführt. Das Thema 3-D ist „etwas“ zu umfangreich, um es hier als kleinen Teil darzustellen. Zum Einstieg lohnt sich daher ein Blick auf die MSDN-Seite. Microsoft stellt auf MSDN ein einfaches Beispiel zum Durcharbeiten bereit [2]. Silverlight unterstützt für das 3-D-Feature einen großen Teil von klassischem XNA-4.0-Code. Was lediglich im Vergleich zu XNA fehlt, ist die Content Pipeline, mit der in reinem XNA verschiedene Inhalte wie Sprites geladen werden. Wer also Erfahrung mit 3-D in XNA hat, der wird in Silverlight sehr schnell zurechtkommen. Wer Erfahrung mit 3-D in WPF hat, findet in Silverlight leider ein komplett anderes API, das neu erlernt werden muss.

Vektorbasiertes (PostScript-)Drucken

In Silverlight 4 wurde das clientseitige Drucken eingeführt. Allerdings ist die Druckfunktion in Silverlight 4 bitmap-basiert. Silverlight 4 sendet also beim Drucken für eine Seite ein komplettes Bitmap an den Drucker. Dies stellt eine beachtliche Menge an Daten dar. Aus diesem Grund eignet sich die bitmap-basierte Druckfunktion in Silverlight 4 nur für Druckaufträge mit weniger als fünf Seiten. Typischerweise wird sie für einfache Dinge wie Screenshots genutzt. Für komplexere Ausdrucke wie Reports ist das bitmap-basierte Drucken nicht performant genug. Silverlight 5 schafft hier Abhilfe und stellt das vektorbasierte, auf PostScript basierende Drucken zur Verfügung. Es ist schneller und bietet eine höhere Auflösung. Vorausgesetzt wird allerdings, dass Drucker und Druckertreiber PostScript-tauglich sind. Ansonsten findet ein Fallback auf das bitmap-basierte Drucken statt. Für das vektorbasierte Drucken wird wie auch für das bitmap-basierte Drucken die PrintDocument-Klasse genutzt. Die Print-Methode führt in Silverlight 5 automatisch ein vektorbasiertes Drucken aus. Das heißt derselbe Code einer Silverlight-4-Anwendung führt in Silverlight 5 ein vektorbasiertes Drucken aus. Bei Transparenzeffekten auf einer Seite kann es beim Drucken auch zu einem Fallback zum bitmap-basierten Drucken kommen. Mit der in der neuen Silverlight-Version eingeführten PrinterFallbackSettings-Klasse und deren Property ForceVector lässt sich das vektorbasierte Drucken für einen solchen Fall forcieren. Eine PrinterFallbackSettings-Instanz wird einfach als zweiter Parameter an die Print-Methode des PrintDocument-Objekts übergeben. Listing 6 zeigt ein kleines Beispiel.

Listing 6
    private void Button_VectorPrint(object sender, RoutedEventArgs e)
    {
      var doc = new PrintDocument();
      doc.PrintPage += (s, ea) =>
      {
        var stackPanel = new StackPanel { Margin = new Thickness(10) };

     
        for (int i = 0; i < 20; i++)
        {
          var textBlock = new TextBlock();
          textBlock.Text = "Nummer " +i;

          stackPanel.Children.Add(textBlock);
        }

        ea.PageVisual = stackPanel;
        ea.HasMorePages = false;
      };

      PrinterFallbackSettings settings = new PrinterFallbackSettings();
      settings.ForceVector = true;

      doc.Print("Forcierter Vector-Druck", settings);
    }
  

Vertrauenswürdige Apps im Browser

Mit Silverlight 5 lassen sich vertrauenswürdige Anwendungen auch innerhalb des Browsers ausführen (Abb. 4). Das ist in vielen Projekten eine wichtige Anforderung. Wenn eine Applikation im Browser läuft und beispielsweise für einen Excel-Export zuerst als Out-of-Browser-Anwendung installiert werden muss, ist das für den Benutzer mühsam. Mit Silverlight 5 gibt es die Möglichkeit, dass die Anwendung auch innerhalb des Browsers mit höheren Rechten läuft und somit COM-Interop oder die im folgenden Abschnitt vorgestellten Plattform-Aufrufe (P/Invoke) unterstützt. Um die Anwendung auch innerhalb des Browsers mit höheren Rechten auszustatten, gibt es in den Eigenschaften des Silverlight-Projekts direkt unterhalb der Out-of-Browser-Checkbox eine neue Checkbox. Wird sie angeklickt, ist die Sandbox weitestgehend aufgebrochen und die Anwendung hat auch im Browser mehr Rechte.

Abb. 4: Vertrauenswürdig innerhalb des Browsers
Abb. 4: Vertrauenswürdig innerhalb des Browsers
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -