2017-07-26 39 views
1

我正在使用Visual Studio 2015,C#,WPF,XAML。從RichTextBox刪除Double LineBreak到字符串

我將文本從RichTextBox複製到string並刪除任何LineBreaks

如果您按Shift + Enter,則發生A LineBreak。但只是Enter導致Double LineBreak

Double LineBreak之後的任何文字從TextRange中被切斷並複製到string

這是什麼Double LineBreak以及如何刪除它?

richtextbox linebreak


XAML

<RichTextBox x:Name="rtbMessage" Margin="10,10,10,50" /> 

C#

Paragraph p = new Paragraph(); 

// Get RichTextBox TextRange Method 
// 
public String MessageRichTextBox() 
{ 
    rtbMessage.Document = new FlowDocument(p); 

    TextRange textRange = new TextRange(
     rtbMessage.Document.ContentStart, 
     rtbMessage.Document.ContentEnd 
    ); 

    return textRange.Text; 
} 


// RichTextBox to String 
// Remove LineBreaks 
// 
string message = MessageRichTextBox().Replace(Environment.NewLine, ""); 

刪除我曾嘗試:

https://stackoverflow.com/a/6750310/6806643

Regex.Replace(MessageRichTextBox(), @"[\u000A\u000B\u000C\u000D\u2028\u2029\u0085]+", string.Empty); 

.Replace(Environment.NewLine, "") 
.Replace("\n", "") 
.Replace("\r\n", "") 
.Replace("\u2028", "") 
.Replace("\u000A", "") 
.Replace("\u000B", "") 
.Replace("\u000C", "") 
.Replace("\u000D", "") 
.Replace("\u0085", "") 
.Replace("\u2028", "") 
.Replace("\u2029", "") 

回答

2

當您檢索RichTextBox文字這樣

public String MessageRichTextBox() 
{ 
    rtbMessage.Document = new FlowDocument(p); 
    TextRange textRange = new TextRange(
     rtbMessage.Document.ContentStart, 
     rtbMessage.Document.ContentEnd 
    ); 
    return textRange.Text; 
} 

修改rtbMessage的內容,所以你得到錯誤內容。我假設你以某種方式引用p中文檔的第一段並將文檔截斷爲第一段。嘗試刪除線rtbMessage.Document = new FlowDocument(p);,看看它是否適合你?

當用戶點擊時輸入沒有插入雙LineBreak,但創建了新的Paragraph。您可以通過嘗試將插入符號放置在大概空行的位置進行驗證 - 如果是雙行分隔符,則應該有空行,並且可以將插入符號放在其上。

不管怎樣,在你的截圖文件應該有2個段落塊這樣的:

  • 第1款: 「你好,世界」。
  • 第2段:「這是測試< LineBreak/>示例。」

因此,我的假設是,當你重新創建一個文檔試圖檢索其內容作爲文本,你只保留第一段,並放棄其餘的。