2017-10-16 9 views
0

Si vous copiez du texte à partir de la cellule WPF DataGrid (Ctrl + C), la fin de ligne (CRLF) est toujours ajoutée à la fin du texte copié. Cela peut empêcher le collage correct du texte copié dans certaines applications.Suppression de l'ajout de CRLF à la fin du texte lors de la copie depuis DataGrid

J'ai essayé d'intercepter la copie en utilisant le comportement et aussi en accrochant directement à DataGrid'sCopyingRowClipboardContent, les deux sans succès.

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 

Existe-t-il un moyen de copier du texte sans ajout de CRLF?

Répondre

1

La meilleure façon de résoudre ce problème est probablement de créer une classe personnalisée DataGrid qui remplace la méthode 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

Il fonctionne! Solution simple et élégante qui ne casse pas mon MVVM. –