检测RichTextBox是否为空

Ben*_*ion 12 wpf richtextbox flowdocument

检测WPF RichTextBox/FlowDocument是否为空的最佳方法是什么?

如果文档中仅存在文本,则以下内容有效.如果它包含UIElement,则不是

new TextRange(Document.ContentStart, Document.ContentEnd).IsEmpty
Run Code Online (Sandbox Code Playgroud)

H.B*_*.B. 14

你可以比较指针,这不是太可靠:

var start = rtb.Document.ContentStart;
var end = rtb.Document.ContentEnd;
int difference = start.GetOffsetToPosition(end);
Run Code Online (Sandbox Code Playgroud)

这将评估2是否加载了RTB,以及4是否已再次输入和删除内容.
如果RTB完全清除,例如通过select all -> delete该值将0.


MSDN上Silverlight参考中,找到了另一种方法,可以对其进行调整和改进:

public bool IsRichTextBoxEmpty(RichTextBox rtb)
{
    if (rtb.Document.Blocks.Count == 0) return true;
    TextPointer startPointer = rtb.Document.ContentStart.GetNextInsertionPosition(LogicalDirection.Forward);
    TextPointer endPointer = rtb.Document.ContentEnd.GetNextInsertionPosition(LogicalDirection.Backward);
    return startPointer.CompareTo(endPointer) == 0;
}
Run Code Online (Sandbox Code Playgroud)