使用WPF DataGrid中的默认复制/粘贴行为,它似乎在复制的内容之后放置换行符,无论是一个单元格的内容还是多行。
是否有一种简单的方法可以不将新行放在复制的文本中?
我想我可以做一些事情,比如听Ctrl-C,执行application.copy命令,然后用删除了换行符的版本替换复制的数据。但这似乎非常混乱。还有更好的方法吗?
答案 0 :(得分:1)
如果您使用的是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.
}
我希望这能指导你正确的方向。
答案 1 :(得分:1)
我最终选择了上面描述的看似凌乱的解决方案。它有效,但确实感觉应该有更好的方法。也许在将来他们会添加一个在正确的时间挂钩的事件,以便能够在设置之前直接编辑完整的剪贴板内容。
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);
}
答案 2 :(得分:0)
我认为最简单的解决方案,而不是挂钩操作系统事件和所有混乱,只是在粘贴之前从字符串中删除空行,就在粘贴之前。