问题描述
我正在使用 Win API (Windows.ApplicationModel.DataTransfer.Clipboard
) 中的剪贴板类。当我尝试将多个项目一个一个地复制到剪贴板历史记录时,它会被最近的项目覆盖。我想将我复制的每个项目存储到剪贴板历史记录中。我的剪贴板历史记录已启用,我尝试使用剪贴板中的所有设置方法,包括 (SetText
) 中的 System.Windows.Clipboard
方法,并且所有这些方法都会覆盖而不是添加到历史记录中。
private void UpdateClipboardOnProfileDropDownClosed(object sender,EventArgs e)
{
Clipboard.ClearHistory();
using (var db = new LiteDatabase(Path.Combine(documents,"Auto Paste Clipboard","data.db")))
{
var collection = db.GetCollection<ClipboardProfile>("clipboard");
var clipboard = collection.FindOne(x => x.Profile == ProfileComboBox.Text);
clipboard.Clipboard.Reverse();
MessageBox.Show(clipboard.Clipboard.Count.ToString());
foreach (var item in clipboard.Clipboard)
{
DataPackage data = new DataPackage
{
RequestedOperation = DataPackageOperation.copy
};
data.SetText(item);
Clipboard.SetContent(data);
}
}
}
解决方法
剪贴板历史保存当前项目需要一些延迟。因此,您可以尝试在添加项目时添加延迟。
请检查以下代码作为示例:
private async void Button_Click(object sender,Windows.UI.Xaml.RoutedEventArgs e)
{
if(Clipboard.IsHistoryEnabled())
{
List<string> lists=new List<string>{ "1","2","3","4","5","6","7","8","9","10"};
foreach(var item in lists)
{
DataPackage dataPackage = new DataPackage();
dataPackage.SetText(item);
Clipboard.SetContent(dataPackage);
await Task.Delay(250);
}
}
}
注意,如果这些项目没有全部添加,您可以增加延迟时间。