2017-10-16 186 views
0

如果從WPF DataGrid單元格(Ctrl + C)複製文本,出於未知原因,總會有行結尾(CRLF)添加到複製文本的末尾。這可能會阻止將複製的文本正確粘貼到某些應用程序。從DataGrid複製時消除將CRLF添加到文本結尾

我試圖攔截複製使用行爲,也直接掛鉤到DataGrid'sCopyingRowClipboardContent,都沒有成功。

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的情況下複製文本?

回答

1

解決這個問題的最簡單的方法可能是創建一個自定義DataGrid類覆蓋OnExecutedCopy方法:

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)); 
    } 
} 
+0

它的工作原理!簡單而優雅的解決方案不會中斷我的MVVM。 –