从WPF DataGrid复制的数据的无关换行符

时间:2011-10-04 18:24:58

标签: c# wpf

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

是否有一种简单的方法可以不将新行放在复制的文本中?

我想我可以做一些事情,比如听Ctrl-C,执行application.copy命令,然后用删除了换行符的版本替换复制的数据。但这似乎非常混乱。还有更好的方法吗?

3 个答案:

答案 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)

我认为最简单的解决方案,而不是挂钩操作系统事件和所有混乱,只是在粘贴之前从字符串中删除空行,就在粘贴之前。