我编写了一个 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();
}
所以问题是如何将文件放到剪贴板,以便即使应用程序关闭,用户也可以粘贴它?
编辑:这似乎是所有 Windows 通用应用程序的问题,例如,如果您在 Windows 照片应用程序中复制图片,则只能在照片应用程序运行时粘贴它。我无法想象这种奇怪的行为应该是Apps的默认行为。它看起来更像是一个错误,因为我看不出这种奇怪行为的原因。
Edit2:问题的新示例(感谢 Joe300 的反馈)。它适用于字符串,但不适用于 StorageFile(即使它首先复制到本地应用程序文件夹)。Flush()命令对文件不起作用的原因是什么?使用文件时有什么特别需要考虑的吗(权限,...)?