2017-10-16 1 views
0

Wenn Sie Text aus WPF DataGrid Zelle (Strg + C) kopieren, aus unbekannten Gründen ist immer Ende der Zeile (CRLF) am Ende des kopierten Textes hinzugefügt. Dies kann das korrekte Einfügen von kopiertem Text in einige Anwendungen verhindern.Entfernen von CRLF am Ende des Textes beim Kopieren aus DataGrid

Ich habe versucht, kopieren mit Verhalten und auch durch direkt an DataGrid'sCopyingRowClipboardContent haken, beide ohne Erfolg.

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 

Gibt es eine Möglichkeit, Text ohne zusätzliche CRLF zu kopieren?

Antwort

1

Der einfachste Weg, dies zu beheben, ist wahrscheinlich eine benutzerdefinierte DataGrid Klasse zu erstellen, die die OnExecutedCopy Methode überschreibt:

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

Es funktioniert! Einfache und elegante Lösung, die meinen MVVM nicht bricht. –

Verwandte Themen