从 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));
}
}
如果您从 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));
}
}