Zwischenablage in Windows 8 und .NET

 

Egal ob mit C# oder VB.NET, die Verwendung des Clipboards ist mit .net sehr einfach. So ab Silverlight 4 mit der statischen Clipboard Klasse und Settext. Wie der Name schon sagt Text. WinRT kann aber auch HTML, Bilder, URLs und einiges mehr.

Eigentlich ist die zwischen Ablage obsolet im Windows 8 METRO styled APPs Konzept. Die Aufgabe ist viel besser mit den Sharing Contracts (Target/Source) zu meistern. Aber es gibt ja noch klassische Anwendungen die mit Winforms oder WPF entwickelt sind. Da ist neben dem Dateisystem, die Zwischenablage, die einzig sinnvolle und mögliche Form der Interprozess Kommunikation.

Es gibt auch in WinRT eine statische Clipboard Klasse die per Clipboard.SetContent einen Typ  Datapackage als Parameter akzeptiert.  Datapackage hat verschiedene Methoden für den jeweiligen Typ wie HTML oder Text.

Dim dp As DataPackage = New DataPackage
Dim html = HtmlFormatHelper.CreateHtmlFormat("test")
DataPackage.SetHtmlFormat(html)

 dp.SetText("Hallo Welt")

 

Im folgenden Beispiel wird ein Bild von der lokalen Festplatte gelesen, angezeigt und in die Zwischenablage kopiert. So steht das Bild dann auch z.B. einem Desktop Programm wie Word zur Verfügung.

Dim fs As IStorageFile = Await KnownFolders.PicturesLibrary.GetFileAsync("world.jpg")
Dim b As IRandomAccessStream = Await fs.OpenAsync(FileAccessMode.Read)
Dim bi As BitmapImage = New BitmapImage()
bi.SetSource(b)
img1.Source = bi
  
Dim dp As DataPackage = New DataPackage

Dim ra = RandomAccessStreamReference.CreateFromFile(fs)
dp.SetBitmap(ra)
     
Clipboard.SetContent(dp)

 

Um ein beliebiges Bild aus der Zwischenablage zu lesen und in einem Image Steuerelement (hier img1) anzuzeigen hilft GetContent.

Dim dp As DataPackageView = Clipboard.GetContent()
Dim b As BitmapImage = New BitmapImage()
Dim img As IRandomAccessStreamReference = Await dp.GetBitmapAsync()
Dim s As IRandomAccessStream = Await img.OpenReadAsync()
b.SetSource(s)
img1.Source = b

 

Viel Spass damit und die Fragen wie immer hier im Blog Post.

Kommentare sind geschlossen