Formatting text in a TextBlock

前端 未结 6 2107
青春惊慌失措
青春惊慌失措 2020-11-27 11:58

How do I achieve formatting of a text inside a TextBlock control in my WPF application?

e.g.: I would like to have certain words in bold, others in ital

相关标签:
6条回答
  • 2020-11-27 12:05

    There are various Inline elements that can help you, for the simplest formatting options you can use Bold, Italic and Underline:

    <TextBlock>
        Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
    </TextBlock>
    

    enter image description here

    I think it is worth noting, that those elements are in fact just shorthands for Span elements with various properties set (i.e.: for Bold, the FontWeight property is set to FontWeights.Bold).

    This brings us to our next option: the aforementioned Span element.

    You can achieve the same effects with this element as above, but you are granted even more possibilities; you can set (among others) the Foreground or the Background properties:

    <TextBlock>
        Sample text with <Span FontWeight="Bold">bold</Span>, <Span FontStyle="Italic">italic</Span> and <Span TextDecorations="Underline">underlined</Span> words. <Span Foreground="Blue">Coloring</Span> <Span Foreground="Red">is</Span> <Span Background="Cyan">also</Span> <Span Foreground="Silver">possible</Span>.
    </TextBlock>
    

    enter image description here

    The Span element may also contain other elements like this:

    <TextBlock>
        <Span FontStyle="Italic">Italic <Span Background="Yellow">text</Span> with some <Span Foreground="Blue">coloring</Span>.</Span>
    </TextBlock>
    

    enter image description here

    There is another element, which is quite similar to Span, it is called Run. The Run cannot contain other inline elements while the Span can, but you can easily bind a variable to the Run's Text property:

    <TextBlock>
        Username: <Run FontWeight="Bold" Text="{Binding UserName}"/>
    </TextBlock>
    

    enter image description here

    Also, you can do the whole formatting from code-behind if you prefer:

    TextBlock tb = new TextBlock();
    tb.Inlines.Add("Sample text with ");
    tb.Inlines.Add(new Run("bold") { FontWeight = FontWeights.Bold });
    tb.Inlines.Add(", ");
    tb.Inlines.Add(new Run("italic ") { FontStyle = FontStyles.Italic });
    tb.Inlines.Add("and ");
    tb.Inlines.Add(new Run("underlined") { TextDecorations = TextDecorations.Underline });
    tb.Inlines.Add("words.");
    
    0 讨论(0)
  • 2020-11-27 12:09

    This is my solution....

        <TextBlock TextWrapping="Wrap" Style="{DynamicResource InstructionStyle}"> 
            <Run Text="This wizard will take you through the purge process in the correct order." FontWeight="Bold"></Run>
            <LineBreak></LineBreak>
            <Run Text="To Begin, select" FontStyle="Italic"></Run>
            <Run x:Name="InstructionSection" Text="'REPLACED AT RUNTIME'" FontWeight="Bold"></Run>
            <Run Text="from the menu." FontStyle="Italic"></Run>
        </TextBlock>
    

    I am learning... so if anyone has thaughts on the above solution please share! :)

    0 讨论(0)
  • 2020-11-27 12:20

    Check out this example from Charles Petzolds Bool Application = Code + markup

    //----------------------------------------------
    // FormatTheText.cs (c) 2006 by Charles Petzold
    //----------------------------------------------
    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Documents;
    
    namespace Petzold.FormatTheText
    {
        class FormatTheText : Window
        {
            [STAThread]
            public static void Main()
            {
                Application app = new Application();
                app.Run(new FormatTheText());
            }
            public FormatTheText()
            {
                Title = "Format the Text";
    
                TextBlock txt = new TextBlock();
                txt.FontSize = 32; // 24 points
                txt.Inlines.Add("This is some ");
                txt.Inlines.Add(new Italic(new Run("italic")));
                txt.Inlines.Add(" text, and this is some ");
                txt.Inlines.Add(new Bold(new Run("bold")));
                txt.Inlines.Add(" text, and let's cap it off with some ");
                txt.Inlines.Add(new Bold(new Italic (new Run("bold italic"))));
                txt.Inlines.Add(" text.");
                txt.TextWrapping = TextWrapping.Wrap;
    
                Content = txt;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-27 12:22

    You need to use Inlines:

    <TextBlock.Inlines>
        <Run FontWeight="Bold" FontSize="14" Text="This is WPF TextBlock Example. " />
        <Run FontStyle="Italic" Foreground="Red" Text="This is red text. " />
    </TextBlock.Inlines>
    

    With binding:

    <TextBlock.Inlines>
        <Run FontWeight="Bold" FontSize="14" Text="{Binding BoldText}" />
        <Run FontStyle="Italic" Foreground="Red" Text="{Binding ItalicText}" />
    </TextBlock.Inlines>
    

    You can also bind the other properties:

    <TextBlock.Inlines>
        <Run FontWeight="{Binding Weight}"
             FontSize="{Binding Size}"
             Text="{Binding LineOne}" />
        <Run FontStyle="{Binding Style}"
             Foreground="Binding Colour}"
             Text="{Binding LineTwo}" />
    </TextBlock.Inlines>
    

    You can bind through converters if you have bold as a boolean (say).

    0 讨论(0)
  • 2020-11-27 12:24

    You can do this in XAML easily enough:

    <TextBlock>
      Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
    </TextBlock>
    
    0 讨论(0)
  • 2020-11-27 12:27

    a good site, with good explanations:

    http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/

    here the author gives you good examples for what you are looking for! Overal the site is great for research material plus it covers a great deal of options you have in WPF

    Edit

    There are different methods to format the text. for a basic formatting (the easiest in my opinion):

        <TextBlock Margin="10" TextWrapping="Wrap">
                        TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
        </TextBlock>
    

    Example 1 shows basic formatting with Bold Itallic and underscored text.

    Following includes the SPAN method, with this you van highlight text:

       <TextBlock Margin="10" TextWrapping="Wrap">
                        This <Span FontWeight="Bold">is</Span> a
                        <Span Background="Silver" Foreground="Maroon">TextBlock</Span>
                        with <Span TextDecorations="Underline">several</Span>
                        <Span FontStyle="Italic">Span</Span> elements,
                        <Span Foreground="Blue">
                                using a <Bold>variety</Bold> of <Italic>styles</Italic>
                        </Span>.
       </TextBlock>
    

    Example 2 shows the span function and the different possibilities with it.

    For a detailed explanation check the site!

    Examples

    0 讨论(0)
提交回复
热议问题