Каждый раз, когда пользователь закрывает приложение, содержимое буфера обмена, скопированное из приложения, очищается.
При тестировании на моей стороне, если использовать 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();
}