格式化文本块中的文本


104

如何TextBlock在WPF应用程序中的控件中实现文本的格式设置?

例如:我想用粗体显示某些单词,用斜体显示其他单词,用不同的颜色显示某些单词,例如以下示例:

在此处输入图片说明

我的问题背后的原因是这个实际问题:

lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();

我希望字符串的第二部分为粗体,并且我知道我可以使用两个控件(标签,文本块等),但由于大量控件已在使用中,我宁愿不使用。

Answers:


139

您需要使用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>

带绑定:

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

您还可以绑定其他属性:

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

如果您将粗体作为布尔值(例如),则可以通过转换器进行绑定。


98

您可以在XAML中轻松完成此操作:

<TextBlock>
  Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>

精彩!我不知道XAML支持这种结构。
Allon Guralnek,2012年

6
这是否支持绑定?
Arsen Mkrtchyan 2012年

11
@ArsenMkrt怎么样:<TextBlock FontWeight =“ Bold” Text =“ {Binding Budget}” />
Aetherix 2013年

2
@Aetherix我无法正常工作。我从qqbenq使用它:<TextBlock> <Bold>£</ Bold> <Run FontWeight =“ Bold” Text =“ {Binding MonthlyPayment}” /> </ TextBlock>的每月还款
Gail Foad

49

Inline对于可以使用的最简单的格式设置选项,您可以使用各种元素来帮助您BoldItalic以及Underline

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

在此处输入图片说明

我认为值得注意的是,这些元素实际上只是Span设置了各种属性的元素(即for Bold,该FontWeight属性设置为FontWeights.Bold)的简写形式。

这将我们带到下一个选择:上述Span元素。

使用上面的这个元素,您可以达到相同的效果,但是您被赋予了更多的可能性。您可以设置(Foreground或其他)Background属性:

<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>

在此处输入图片说明

所述Span元件还可以包含其它元素是这样的:

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

在此处输入图片说明

还有一个非常类似于的元素Span称为RunRun不能在罐头中包含其他内联元素Span,但是您可以轻松地将变量绑定到RunText属性:

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

在此处输入图片说明

另外,如果您愿意,也可以从代码隐藏中进行整个格式化:

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.");

44

从Charles Petzolds Bool应用程序中查看此示例=代码+标记

//----------------------------------------------
// 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;
        }
    }
}

7

一个很好的网站,并提供很好的解释:

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

在这里,作者为您提供了所需的好例子!该网站的总体介绍非常适合作为研究材料,并且涵盖了您在WPF中拥有的大量选择

编辑

有多种格式化文本的方法。基本格式(我认为最简单):

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

示例1显示了带有 斜体和带下划线的文本的基本格式。

以下包括SPAN方法,通过该方法可以突出显示文本:

   <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>

例2展示了span函数及其各种可能性。

有关详细说明,请检查站点!

例子


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。- 评分
理查德·斯莱特

1
@Mogsdad编辑了该帖子,因此它显示了代码示例
Giellez,2016年

@RichardSlater编辑了该帖子,以便它显示代码示例
Giellez

0

这是我的解决方案。

    <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>

我正在学习...所以,如果有人对上述解决方案有兴趣,请分享!:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.