ユーザーがアプリを閉じるたびに、アプリ内からコピーされたクリップボードの内容が消去されます。
私の側でテストしたところ、Clipboard.SetContent()
メソッドを使用してコンテンツをクリップボードにコピーすると、アプリを閉じた後、コンテンツはデフォルトでクリアされません。ただしCtrl+C
、コンテキストメニューを使用または右クリックすると、前述のように、クリップボードへのコンテンツのコピーがクリアされます。
もう 1 つの回避策は、Clipboard.ContentChanged を使用することです。しかし、この状況で使用すると、何らかの理由でメソッドが無限ループを作成します
これを解決するには、Clipboard.ContentChanged
イベント ハンドルが役立ち Ctrl+C
ます。これは、コンテキスト メニューの両方または右クリックがこのイベントをトリガーするためです。ループは、あなたがしようとしている、 SetContent
またはトリガーを再びFlush
発生させることによって引き起こされます。ContentChanged
これらのメソッドを呼び出す前に、イベント サブスクリプションの削除を試みることができます。例えば:
private async void Clipboard_ContentChanged(object sender, object e)
{
Clipboard.ContentChanged -= Clipboard_ContentChanged;
DataPackageView clipboardContent = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
var dataPackage = new DataPackage();
dataPackage.SetText(await clipboardContent.GetTextAsync());
Clipboard.SetContent(dataPackage);
Clipboard.ContentChanged += Clipboard_ContentChanged;
// Clipboard.Flush();
}
空の UWP を作成し、RichEditBox を追加し、Ctrl+C を使用してそこからコンテンツをコピーし、アプリを閉じます。
実際には、アプリが閉じられる前にトリガーされるアプリの中断イベントで、コンテンツをクリップボードに再設定できます。
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Save application state and stop any background activity
DataPackageView clipboardContent = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
var dataPackage = new DataPackage();
dataPackage.SetText(await clipboardContent.GetTextAsync());
Clipboard.SetContent(dataPackage);
// Clipboard.Flush();
deferral.Complete();
}