ユーザーがファイルをクリップボードにコピーできる 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 フォト アプリで画像をコピーすると、フォト アプリの実行中にのみ貼り付けることができます。この奇妙な動作がアプリのデフォルトの動作であるべきだとは想像できません。その奇妙な動作の理由がわからないので、バグのように見えます。
Edit2: 問題の新しい例 (Joe300 のフィードバックに感謝)。文字列では機能しますが、StorageFile では機能しません (最初にローカル アプリ フォルダーにコピーされた場合でも)。Flush()コマンドがファイルで機能しない理由は何ですか? ファイルが使用されるときに考慮すべき特別なことはありますか (パーミッションなど)?