I using C# WPF and I have richtextbox and I want to color some text in red, some in green and some in black. How to do so?
            Asked
            
        
        
            Active
            
        
            Viewed 484 times
        
    2 Answers
1
            Use FlowDocumentReader in your RichTextBox. Thus, you can use document classes: List, Paragraph, Section, Table, LineBreak, Figure, Floater and Span, and change their properties:
<FlowDocumentReader x:Name="myDocumentReader" Height="269.4">
<FlowDocument>
<Section Foreground = "Yellow" Background = "Black">
<Paragraph FontSize = "20">
Here are some fun facts about the WPF Documents API!
</Paragraph>
</Section>
<List x:Name="listOfFunFacts"/>
<Paragraph x:Name="paraBodyText"/>
</FlowDocument>
</FlowDocumentReader>
You can also fill and change properties of, here for example, List right in the code:
this.listOfFunFacts.Foreground = Brushes.Brown;
this.listOfFunFacts.FontSize = 14;
this.listOfFunFacts.MarkerStyle = TextMarkerStyle.Circle;
this.listOfFunFacts.ListItems.Add(new ListItem( new Paragraph(new Run("Sample Text"))));
 
    
    
        CssHammer
        
- 66
- 7
0
            
            
        I needed a "simple" TextBox with different color on each line, using MVVM. All the answers I found deal with the RichTextBox's document as a whole which is overcomplicated for my needs so I post this answer:
XAML
<RichTextBox>
    <FlowDocument>
        <components:BindableParagraph InlineList="{Binding Messages}" />
    </FlowDocument>
</RichTextBox>
BindableParagraph
internal class BindableParagraph : Paragraph
{
    public ObservableCollection<Inline> InlineList
    {
        get { return (ObservableCollection<Inline>)GetValue(InlineListProperty); }
        set { SetValue(InlineListProperty, value); }
    }
    
    public static readonly DependencyProperty InlineListProperty =
        DependencyProperty.Register("InlineList", typeof(ObservableCollection<Inline>), typeof(BindableParagraph), new UIPropertyMetadata(null, OnPropertyChanged));
    private static void OnPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        BindableParagraph textBlock = sender as BindableParagraph;
        ObservableCollection<Inline> list = e.NewValue as ObservableCollection<Inline>;
        list.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(textBlock.InlineCollectionChanged);
    }
    private void InlineCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
        {
            int idx = e.NewItems.Count - 1;
            Inline inline = e.NewItems[idx] as Inline;
            this.Inlines.Add(inline);
        }
    }
}
VM
private ObservableCollection<Inline> _messages;
public ObservableCollection<Inline> Messages
{
    get { return _messages; }
    set { SetProperty(ref _messages, value); }
}
private void AddMessage(string message, MessageLevel messageLevel = MessageLevel.None)
{
    Messages.Add(new Run()
    {
        Foreground = messageLevel == MessageLevel.Error ? Brushes.Red : Brushes.Black,
        Text = message + Environment.NewLine,
    });
}
 
    
    
        Viktor
        
- 334
- 1
- 3
- 14
 
    