从WPF DataGrid复制的数据上有多余的换行符
本文关键字:多余 换行符 数据 DataGrid 复制 WPF | 更新日期: 2023-09-27 18:10:29
使用WPF DataGrid中的默认复制/粘贴行为,它似乎在复制的内容之后放置一个换行符,无论是一个单元格的内容还是多行。
是否有一种简单的方法使它不在复制的文本中放置换行符?
我想我可以做一些事情,比如听Ctrl-C,执行应用程序。复制命令,然后将复制的数据替换为去掉换行符的版本。不过,这看起来非常混乱。有没有更好的办法?
如果您使用的是WPF DataGrid
,则处理其事件dataGrid.CopyingRowClipboardContent
在处理程序中检查
if ((DataGridRow)sender.DataContext
== dataGrid.SelectedItems.GetItemAt(dataGrid.SelectedItems.Count - 1))
{
var lastRowData = e.ClipboardRowContent;
//// manipulate Clipboard to remove new line.
}
我最终采用了上面描述的看起来很混乱的解决方案。它是有效的,但感觉应该有更好的方法。也许将来他们会添加一个事件,在适当的时候挂钩,以便能够在设置剪贴板之前直接编辑完整的内容。
private RelayCommand _resultsGridCopyCommand;
public RelayCommand ResultsGridCopyCommand {
get {
if (_resultsGridCopyCommand == null) {
_resultsGridCopyCommand = new RelayCommand(this.CopyFromResultsGrid);
}
return _resultsGridCopyCommand;
}
}
private void CopyFromResultsGrid(object grid) {
var resultsGrid = (DataGrid)grid;
ApplicationCommands.Copy.Execute(null, resultsGrid);
var oldData = Clipboard.GetDataObject();
var newData = new DataObject();
foreach (var format in oldData.GetFormats()) {
if (format.Equals("UnicodeText") || format.Equals("Text")) {
newData.SetData(format, Regex.Replace(((String)oldData.GetData(format)), "'r'n$", ""));
} else {
newData.SetData(format, oldData.GetData(format));
}
}
Clipboard.SetDataObject(newData);
}
我认为最简单的解决方案,而不是连接OS事件和所有的混乱,只是从字符串中删除空行,将被放置在单元格,就在粘贴之前。