Partager via


如何在winrt程序中使用windows 8 剪切板

        剪切板是一系列的用户驱动功能集,它使应用程序之间能够相互传递数据。Windows 8 Store app 的SDK中定义了一系列的API,您可以在winrt应用程序中调用这些API,来对操作系统中的剪切板进行各种处理。

与剪切板相关的API

        “Clipboard” 是一个在windows.ApplicationModel.DataTransfer命名空间的静态类。通过它,用户可以在剪切板内获取和设置信息。如果您想将数据保存到剪切板内,那么您需要创建一个DataPackage对象。

        接下来我们将分析和解释Clipboard class内的一些方法。

 public static class Clipboard
 {
 public static DataPackageView GetContent();
 public static void SetContent(DataPackage content);
 public static void Flush();
 public static void Clear();
 
 public static event EventHandler<object> ContentChanged;
 }
 

        其中,GetContent()方法可以让您获取剪切板中当前的内容。SetContent()方法是对要存储到剪切板中的内容进行设置。

        以下有四种类型的数据用户可以在剪切板中进行处理:

        ●纯文本

        ●HTML 内容

        ●图片

        ●文件

        接下来我们将讨论如何在windows 8 store app中将这些数据保存到剪切板。

保存纯文本到剪切板

        在windows 8 store app的很多场景中您会发现这个例子是非常有用的。即您可以将纯文本内容存储在剪切板内,然后在不同的应用程序或者桌面应用程序使用这些纯文本。

         首先您需要创建一个DataPackage对象,然后通过调用SetText()方法将纯文本内容赋值到DataPackage对象,最后通过调用SetContent方法来将内容保存到剪切板:

 public void CopyTextToClipboard(string textToCopy)
 {
 var dataPackage = new DataPackage();
 
 dataPackage.SetText(textToCopy);
 Clipboard.SetContent(dataPackage);
 }
 

        现在您已将纯文本内容复制并保存到了系统的剪切板内,可以在当前应用程序中使用它,或者您也可以在不同的windows 8 store app中或者桌面应用程序中使用。

保存Html 内容到剪切板

        有时你需要将Html内容保存在剪切板内。这与保存纯文本的方法类似,但是其中还有一些小的细节需要注意,以下是代码段:

 public void CopyHtmlContentToClipboard(string htmlTextToCopy)
 {
 var dataPackage = new DataPackage();
 var htmlContent = HtmlFormatHelper.CreateHtmlFormat(htmlTextToCopy);
 
 dataPackage.SetHtmlFormat(htmlContent);
 Clipboard.SetContent(dataPackage);
 }
 

        首先您需要调用HtmlFormatHelper.CreateHtmlFormat()方法来处理html字符串,然后将处理好的内容赋值到DataPackage对象,最后通过调用SetContent()方法来将Html内容保存在剪切板。

保存image到剪切板

        如果您需要复制图片,首先必须从系统中获取图像文件。你可以通过StorageFile.GetFileFromApplicationUriAsync()方法从应用程序文件夹中加载图像,或者通过StorageFile.GetFileFromPathAsync()方法从特定的路径获取图片。然后调用SetBitmap()方法将图片数据赋值到DataPackage对象:

 public async void CopyImageToClipboard(Uri imageUri)
 {
 var dataPackage = new DataPackage();
 var storageFile = await StorageFile.GetFileFromApplicationUriAsync(imageUri);
 dataPackage.SetBitmap(RandomAccessStreamReference.CreateFromFile(storageFile));
 
 Clipboard.SetContent(dataPackage);
 }
 

        最后通过调用SetContent()方法来将image保存到剪切板。

保存文件到剪切板

        如果您想将一个文件复制到剪切板,那么您需要从应用程序文件夹或者从不同的路径当中获得该文件,然后将其添加到一个List当中:

 public async void CopyFileToClipboard(Uri fileUri)
 {
 var dataPackage = new DataPackage();
 var files = new List<StorageFile>();
 var storageFile = await StorageFile.GetFileFromApplicationUriAsync(fileUri);
 
 files.Add(storageFile);
 dataPackage.SetStorageItems(files);
 Clipboard.SetContent(dataPackage);
 }
 

        通过调用SetStorageItems()方法您可以将这一系列文件赋值到DataPackage对象,最后通过调用SetContent()方法来将文件保存到剪切板。

获取剪切板内容

        接下来我们将讨论如何在应用程序或者外部应用程序中获取存储在剪切板中的内容。而且在本节中我们也会讨论如何获取剪切板中内容的数据类型。您可以调用GetContent()方法获取剪切板的内容,该函数的返回类型是一个DataPackage对象:

 var dataPackage = Clipboard.GetContent();

        然后您可以判断剪切板内容的数据类型,参考下面的代码:

 if (dataPackage.Contains(StandardDataFormats.Text))
 {
 // handle the text content
 }
 
 if (dataPackage.Contains(StandardDataFormats.Html))
 {
 // handle the HTML content
 }
 
 if (dataPackage.Contains(StandardDataFormats.Bitmap))
 {
 // handle the image content
 }
 
 if (dataPackage.Contains(StandardDataFormats.StorageItems))
 {
 // handle the file content
 }
 

        上述是所有能从剪切板获取内容的数据类型,如果您想要清除当前剪切板内的内容,您可以调用Clipboard.Clear()方法。