从 DataGrid 复制时消除在文本末尾添加 CRLF

Eliminating adding CRLF to end of text while copying from DataGrid

如果您从 WPF DataGrid 单元格 (Ctrl+C) 复制文本,出于未知原因,总是会在复制文本的末尾添加行尾 (CRLF)。这会阻止将复制的文本正确粘贴到某些应用程序。

我尝试使用行为拦截复制,也尝试通过直接挂钩 DataGrid's CopyingRowClipboardContent 来拦截复制,但都没有成功。

Protected Sub OnCopyingRowClipboardContent(sender As Object, e As DataGridRowClipboardEventArgs)
  Dim cellContent = e.ClipboardRowContent(DirectCast(sender, DataGrid).CurrentCell.Column.DisplayIndex)
  e.ClipboardRowContent.Clear()
  e.ClipboardRowContent.Add(cellContent)
  If Clipboard.ContainsText(TextDataFormat.UnicodeText) OrElse
     Clipboard.ContainsText(TextDataFormat.Text) Then
    Dim clipboardText = Clipboard.GetText()
    Dim length = clipboardText.Length
    If length >= 2 Then
      If clipboardText(length - 1) = vbLf AndAlso clipboardText(length - 2) = vbCr Then
        clipboardText = clipboardText.Substring(0, length - 2)
        Clipboard.SetText(clipboardText)
      End If
    End If
  End If
End Sub  

有什么方法可以在不添加 CRLF 的情况下复制文本?

解决此问题的最简单方法可能是创建一个覆盖 OnExecutedCopy 方法的自定义 DataGrid class:

public class CustomDataGrid : DataGrid
{
    protected override void OnExecutedCopy(ExecutedRoutedEventArgs args)
    {
        base.OnExecutedCopy(args);

        string text = Clipboard.GetText();
        if(!string.IsNullOrEmpty(text))
            Clipboard.SetText(text.Replace("\r\n", string.Empty));
    }
}