Я пишу универсальное приложение С# для 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 Photo, вы можете вставить его только во время работы приложения Photo. Я не могу представить, что это странное поведение должно быть поведением приложений по умолчанию. Это больше похоже на ошибку, потому что я не вижу причин для такого странного поведения.
Edit2: новый пример проблемы (спасибо Joe300 за отзыв). Он работает со строками, но не с StorageFile (даже если он сначала скопирован в локальную папку приложения). По какой причине команда Flush() не работает с файлами? Есть ли что-то особенное, что следует учитывать при использовании файлов (разрешения, ...)?