Copy & Paste mit Silverlight 4

In den Eingabefeldern einer Silverlight Anwendung lässt sich Copy and Paste ganz einfach über die bekannten Tastenkombinationen verwenden.

Tastenkombination Bedeutung
Strg+A Gesamten Text markieren
Strg+X Markierten Text ausschneiden
Strg+C Markierten Text kopieren
Strg+V Text einfügen

Seit Silverlight 4 besteht nun zusätzlich die Möglichkeit mittels statischer Methoden der statischen Klasse Clipboard im Namesraum System.Windows in Silverlight-Anwendungen auch programmatisch auf die Zwischenablage zuzugreifen.

Da dies eine sicherheitskritische Aktion ist, erhält der Benutzer einen entsprechenden Hinweis darauf und muss entscheiden ob er das zulassen möchte oder nicht.

Entscheidet sich ein Benutzer gegen den Zugriff auf die Zwischenablage, wird eine SecurityException (Namensraum System.Security) geworfen – diese sollte man in seinem Code auch möglichst behandeln, damit die Anwendung nicht einfach beendet wird.

Beim Betätigen der Tastenkombinationen zum Einfügen, Ausschneiden oder Kopieren hat man dieses Problem nicht, denn diese Aktionen werden ja vom Benutzer initiiert und sind demnach in Ordnung. Beim programmatischen Zugriff hingegen, könnte ohne den obigen Hinweis an den Benutzer, ein böswilliges Programm z.B. Informationen aus den Eingabefeldern rauskopieren, ohne dass der Benutzer davon etwas mitbekommt. Aus diesem Grund sollte man sich genau überlegen, ob man in seiner Anwendung unbedingt per Programmcode auf die Zwischenablage zugreifen muss.

Hinzu kommt, dass bei den Vorgängen zum Umgang mit der Zwischenablage auch einiges an Zusatzarbeit auf den Entwickler zukommt – die Standard-Tastenkombinationen funktionieren hingegen ohne weiteres Zutun. In dem unten aufgeführten Quellcode habe ich es mir einfach gemacht und berücksichtige nur ein einziges Eingabefeld (tbName). Dazu habe ich drei Schalter angelegt, die jeweils den Text aus dem Eingabefeld ausschneiden oder kopieren bzw. in das Eingabefeld einfügen. Möchte man diese Aktionen für mehrere Eingabefelder verwenden ist natürlich zusätzliche Logik erforderlich.

Drucken mit Silverlight 4

In Silverlight 4 gibt es die Klasse PrintDocument. Damit ist es möglich in Silverlight auf sehr einfache Weise zu drucken. Zum Testen habe ich ein Image und einen Schalter zum Drucken des Image erstellt.

Nachfolgend der XAML-Code

Drückt der Benutzer den Schalter Drucken, soll das Image auf dem Drucker ausgegeben werden. Dazu wird in der Ereignisbehandlungsroutine für den Button ein neues PrintDocument erzeugt und für das PrintPage-Ereignis die Methode p_PrintPage registriert. Gestartet wird der Druck mit der Methode Print.

Jetzt möchte ich aber auch noch den Schalter mit ausdrucken. Sowohl das Bild als auch der Schalter befinden sich in einem StackPanel mit dem Namen LayoutRoot. Um nun das StackPanel komplett zu drucken, ändere ich die p_PrintPage Methode

Wenn man sieht wird nun anstelle des Images das StackPanel verwendet – das ist alles.
Lässt man die Anwendung laufen, wird das Bild und der Schalter ausgedruckt.