我编写了一个C#Windows通用应用程序,用户可以将文件复制到剪贴板中。但如果应用程序关闭,剪贴板内容就会丢失。如果用户可以如此容易地丢失他的剪贴板内容,那么可用性是可怕的。有没有一种方法可以使应用程序的剪贴板内容持久化,就像在任何其他经典的Windows应用程序中一样?
示例代码:
public static void CopyFileToClipboard(StorageFile file) {
DataPackage dp = new DataPackage();
dp.RequestedOperation = DataPackageOperation.Copy;
dp.SetStorageItems(new List<StorageFile>() { file });
Clipboard.SetContent(dp); // not available after app closed
Clipboard.Flush();
}
public static void CopyTextToClipboard(string text) {
DataPackage dp = new DataPackage();
dp.RequestedOperation = DataPackageOperation.Copy;
dp.SetText(text); // available after app closed
Clipboard.SetContent(dp);
Clipboard.Flush();
}
//I have tried to copy the file to the app folder first but it has nothing changed.
public async static void CacheAndCopyFileToClipboard(StorageFile file) {
DataPackage dp = new DataPackage();
dp.RequestedOperation = DataPackageOperation.Copy;
var xfile = await ApplicationData.Current.LocalFolder.CreateFileAsync(file.Name);
await file.CopyAndReplaceAsync(xfile);
dp.SetStorageItems(new List<StorageFile>() { xfile });
Clipboard.SetContent(dp); // not available after app closed
Clipboard.Flush();
}
所以问题是我怎样才能把一个文件放到剪贴板上,以便用户在App关闭的情况下也能粘贴它呢?
编辑:这似乎是所有Windows通用应用程序的一个问题,例如,如果你在Windows Photo应用程序中复制一张图片,你只能在Photo应用程序运行时粘贴它。我无法想象这种奇怪的行为应该是应用程序的默认行为。它看起来更像是一个虫子,因为我看不出这种奇怪行为的原因。
问题的新示例(感谢Joe300的反馈)。它可以处理字符串,但不能处理StorageFile(即使它首先被复制到本地应用程序文件夹)。Flush()命令不能处理文件的原因是什么?在使用文件(权限,……)时,有什么特别的需要考虑的吗?
您需要添加对
将内容添加到剪贴板并从源应用程序释放DataPackage对象。此方法允许内容在应用程序关闭后仍然可用。
还应设置
dp.RequestedOperation = DataPackageOperation.Copy;
try
{
Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(dp);
Clipboard.Flush();
}
catch (Exception ex)
{
// Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open
}
除此之外,实际上没有任何其他选项来操作