每次用户关闭应用程序时,从应用程序内复制的剪贴板内容都会被清除。
通过我这边的测试,如果使用Clipboard.SetContent()
方法复制内容到剪贴板,应用关闭后内容默认不会被清除。但是,如果使用Ctrl+C
或右键单击上下文菜单,如您所述,复制到剪贴板的内容将被清除。
另一种解决方法是使用 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();
}