Вот расширение идеи Х.Б., которая работает как с текстом, так и с изображениями .
Я обнаружил, что разница всегда> 4, когда в RTB есть текст. Тем не менее, если вы вставляете только изображение, это 3. Для борьбы с этим я смотрю на длину строки необработанной строки RTF.
var start = Document.ContentStart;
var end = Document.ContentEnd;
var difference = start.GetOffsetToPosition(end);
HasText = difference > 4 || GetRtfText().Length > 350;
public string GetRtfText()
{
var tr = new TextRange(Document.ContentStart, Document.ContentEnd);
using (var ms = new MemoryStream())
{
tr.Save(ms, DataFormats.Rtf);
return Encoding.Default.GetString(ms.ToArray());
}
}
В ходе тестирования я обнаружил, что пустая коробка без символов имеет длину 270. Если я даже вставлю изображение размером всего в 1 пиксель, оно получит 406.
Я играл с переключением на различные параметры форматирования, не набирая букв, и не приблизился к 300, поэтому я выбрал 350 для базовой линии.
Проверка длины может быть дорогой, если нет текстовых символов, но они вставлены в массивное изображение.