2013-06-18 2 views
2

Я искал какое-то время для этого решения, так что теперь я размещаю здесь.WPF RichTextBox изменить цвет шрифта inline

Прямо сейчас я могу изменить цвет переднего плана всего RichTextBox:

yourRichTextBox.Foreground = Brushes.Red; 

Я также в состоянии изменить цвет какой-то текст, который пользователь выбрал с их курсором:

if(!yourRichTextBox.Selection.IsEmpty){ 
    yourRichTextBox.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red); 
} 

Но я хочу, чтобы иметь возможность изменять цвет следующего текста, который пользователь вводит.

У меня есть панель выбора цвета, которая возвращает цвет, в котором пользователь хочет, чтобы текст находился. Таким образом, пользователь вводит текст RichTextBox в обычном черном шрифте, затем они нажимают кнопку выбора цвета, выбирают цвет, попадают ОК, а затем следующее, что они напечатают, будет в этом цвете. Есть ли способ сделать это, или мне не повезло?

Единственный способ, которым я могу это сделать, это иметь буфер, который захватывает каждый символ, который пользователь вводит, а затем задавать свойство переднего плана на каждой введенной букве, а затем добавлять его обратно в RichTextBox, идеи?

+0

Решение найдено здесь будет работать Я думаю (не тестировал): http://stackoverflow.com/questions/1926264/color-different-parts-of-a-richtextbox-string?answertab=active#tab -top Функция AppendText перегружена и может быть вызвана с дополнительным цветовым свойством –

ответ

1

Тот же код, который вы используете для своего выбора, работает для меня. Например:

<RichTextBox x:Name="yourRichTextBox" TextChanged="yourRichTextBox_TextChanged_1"> 
     <FlowDocument> 
      <Paragraph> 
       <Run Text="fdsfdfsda"/> 
      </Paragraph> 
      <Paragraph> 
       <Run/> 
      </Paragraph> 
     </FlowDocument> 
    </RichTextBox> 

Код Behind:

private void yourRichTextBox_TextChanged_1(object sender, TextChangedEventArgs e) 
    { 
     yourRichTextBox.Selection.ApplyPropertyValue(RichTextBox.ForegroundProperty, Brushes.Red); 
    } 

После того, как вы начнете печатать, вторая буква и далее (первый Триггеры это изменение) будет красным.

+0

Мне нужно будет выяснить, что это за второе письмо, но это, безусловно, то, что я искал, я даже не думал о захвате ' TextChanged'. Благодаря! – ToastyMallows

+0

PreviewKeyDown вместо TextChanged. –