为什么一个空的 RichtTextBox 将“\r\n”作为文本?

Why an empty RichtTextBox has "\r\n" as text?

这是一个文本编辑器。我正在尝试打开一个新文件,如果现有文件不为空,用户会收到一条警告,要求用户保存文件或不保存文件。但是如果我使用条件 if (text== ""),文本的值仍然有 "\r\n" 换行值。即使我没有点击文本区域。 为什么字符串获取新行的值?它不一定是空的?

private void New_Click(object sender, RoutedEventArgs e)
{
    var text = new TextRange(richtxtbox.Document.ContentStart, richtxtbox.Document.ContentEnd).Text; 

    if (text == "")
    {
        MainWindow newWindow = new MainWindow();
        newWindow.Show();
        Window.GetWindow(this).Close();
    }
    else
    {
        // ...       
    }
}

我必须这样做:

if (text == "" || text == "\r\n")
{
    MainWindow newWindow = new MainWindow();
    newWindow.Show();
    Window.GetWindow(this).Close();
}

您写道:

I am trying to open a new file and if the existing file is not empty...

什么意思“现有文件不为空”?我猜你指的是 RichtextBox 的当前内容,它实际上是 FlowDocument 对象的容器。对吗?

var text = new TextRange(richtxtbox.Document.ContentStart, richtxtbox.Document.ContentEnd).Text 的结果取决于 FlowDocument 的内容。

如果您声明 RichTextBox 如下,那么 text 将包含 "\r\n"。这是因为 FlowDocument 将包含一个 Paragraph 块。当此段落转换为文本时,它会自动附加 Environment.NewLine.

<RichTextBox Name="richtxtbox">
    <FlowDocument>
        <Paragraph>          
        </Paragraph>
    </FlowDocument>
</RichTextBox>

但是,如果您将 RichTextBox 声明为空 FlowDocument,那么 text 将是空的 - 它包含 0 个块。

<RichTextBox Name="richtxtbox">
    <FlowDocument>
    </FlowDocument>
</RichTextBox>

有关详细信息,请阅读以下文章:RichTextBox Overview