RichTextBox到文本文件不会保存LineBreaks

时间:2017-07-25 01:20:06

标签: c# wpf visual-studio xaml

我有一个RichTextBox和一个Button,可将其文本保存为.txt文件。

但是它没有保存LineBreaks \n。它最终都在一行中。

有什么可以阻止它?我使用Encoding.Unicode

XAML

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

<Button x:Name="btnSave" Content="Save" Margin="231,264,211,29" Width="75" Click="btnSave_Click"/>

C#

String message = "Hello, world.\n\n This is a test.";
Paragraph p = new Paragraph();


// Startup
// Write Message to RichTextBox
//
public MainWindow()
{
    InitializeComponent();

    rtbMessage.Document = new FlowDocument(p);

    rtbMessage.BeginChange();
        p.Inlines.Add(new Run(message));
    rtbMessage.EndChange();
}


// Copy RichTextBox to String
//
public String MessageRichTextBox()
{
    FlowDocument fd = new FlowDocument(p);
    rtbMessage.Document = fd;

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

    return textRange.Text;
}


// Save Message to .txt File
//
private void buttonSave_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog();

    // Save File Default Path same as Input Directory
    saveFile.RestoreDirectory = true;
    saveFile.Filter = "Text file (*.txt)|*.txt";
    saveFile.DefaultExt = ".txt";
    saveFile.FileName = "Message";

    // Show Save File dialog box
    Nullable<bool> result = saveFile.ShowDialog();

    // Process dialog box
    if (result == true)
    {
        // Save document
        File.WriteAllText(saveFile.FileName, MessageRichTextBox(), Encoding.Unicode);
    }
}

3 个答案:

答案 0 :(得分:0)

我使用richtextbox,但我使用Environment.NewLine而不是&#34; \ n&#34;。

在你的例子中:

String message = "Hello, world." + Environment.NewLine + Environment.NewLine + "This is a test.";

也许这是一种解决方法。

答案 1 :(得分:0)

当您抓住该消息时,您似乎正在重置该消息

public String MessageRichTextBox()
{
    FlowDocument fd = new FlowDocument(p);
    rtbMessage.Document = fd;

似乎没必要,可能是原因。我不能在我旁边没有Windows机器验证(现在在Mac上对不起),只是尝试一下

答案 2 :(得分:0)

更改

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

TextRange textRange = new TextRange(
            p.ContentStart,
            p.ContentEnd)