从WPF DataGrid复制的数据上有多余的换行符

本文关键字:多余 换行符 数据 DataGrid 复制 WPF | 更新日期: 2023-09-27 18:10:29

使用WPF DataGrid中的默认复制/粘贴行为,它似乎在复制的内容之后放置一个换行符,无论是一个单元格的内容还是多行。

是否有一种简单的方法使它不在复制的文本中放置换行符?

我想我可以做一些事情,比如听Ctrl-C,执行应用程序。复制命令,然后将复制的数据替换为去掉换行符的版本。不过,这看起来非常混乱。有没有更好的办法?

从WPF DataGrid复制的数据上有多余的换行符

如果您使用的是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事件和所有的混乱,只是从字符串中删除空行,将被放置在单元格,就在粘贴之前。