2017-01-10 12 views
0

Я использую "FlowDocumentReader", чтобы показать текст, то XAML код "FlowDocumentReader" проста:(C# WPF) Как изменить цвет фона textrange?

<FlowDocumentReader x:Name="myDocumentReader" ViewingMode="Scroll" VerticalAlignment="Stretch" ContextMenuOpening="myDocumentReader_ContextMenuOpening" Margin="0,0,0,0" Grid.Row="1" PreviewMouseDown="myDocumentReader_PreviewMouseDown"> 
    <FlowDocument x:Name="flow" LineHeight="{Binding ElementName=slider2, Path=Value}" PagePadding="{Binding ElementName=slider, Path=Value}"> 
     <Paragraph x:Name="paraBodyText"/> 
    </FlowDocument> 
</FlowDocumentReader> 

И я загружаю .rtf документы "FlowDocumentReader", как это:

paraBodyText.Inlines.Clear(); 
string temp = File.ReadAllText(dlg.FileName, Encoding.UTF8); 
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(temp)); 
TextRange textRange = new TextRange(flow.ContentStart, flow.ContentEnd); 
textRange.Load(stream, DataFormats.Rtf); 
myDocumentReader.Document = flow; 

Теперь, мой вопрос: как получить цвет фона строки в «flowdocumentreader»?

Я знаю, как искать строку, но я не знаю, как проверить задний цвет такой строки. Есть ли способ сделать это? Я пытался получить TextRange строки, а затем сделать это:

TextRange selection = ....; // this is the textrange of the string 
var a = selection.GetPropertyValue(TextElement.BackgroundProperty) 

Однако, переменная «а» всегда возвращает нуль. :(

Заранее спасибо за ваше время

EDIT:... .rtf документ, который я загрузил в «FlowDocumentReader» имеет цвета фона Некоторые зеленые и некоторые желтые

enter image description here

ответ

1

Однако, переменная "а" всегда возвращает нуль. :(

Что делать, если вы на самом деле установить фоновый цвет ?:

TextRange selection = new TextRange(flow.ContentStart, flow.ContentEnd); 
var a = selection.GetPropertyValue(TextElement.BackgroundProperty); 
selection.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.Yellow); 
a = selection.GetPropertyValue(TextElement.BackgroundProperty); 

<FlowDocumentReader x:Name="myDocumentReader" ViewingMode="Scroll" VerticalAlignment="Stretch"> 
    <FlowDocument x:Name="flow"> 
     <Paragraph x:Name="paraBodyText"> 
      some text... 
     </Paragraph> 
    </FlowDocument> 
</FlowDocumentReader> 

Там нет значения по умолчанию для свойства TextElement.BackgroundProperty в виде TextRange поэтому вы получите пустую ссылку обратно из метод GetPropertyValue в первый раз, используя вышеприведенный пример кода.

+0

Спасибо за ответ. Документ .rtf, который я загрузил в «FlowDocumentReader», имеет цвета фона, некоторые из них зеленые, а некоторые - желтые. Но я все еще получал нулевые значения, когда я проходил через textrange. –

+0

Не могли бы вы предоставить образец этого .rtf тогда? – mm8

+0

Да, конечно. Документ .rtf содержит только одно предложение, как показано в моем отредактированном сообщении. Это только для тестирования, и только 1 КБ. BTW, пожалуйста, проигнорируйте содержимое документа .rtf, это «является» документом rtf. :) –

0

Прошло некоторое время, но, наконец, выяснилось, почему проблема заключается в том, что иногда свойство фона добавляется в Span, содержащий текст Run, и мы запрашиваем цвет Run Run, а не его родительский (Span или Абзац), больше информации в моем Вопрос/ответ:

C# WPF RichText Box BackgroundProperty returns null when reading from file