设置 TextBlock 中文本的格式

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

e.g.: I would like to have certain words in bold, others in italic, and some in different colors, like this example:

enter image description here

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

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

我希望字符串的第二部分是粗体的,并且我知道我可以使用两个控件(Labels,TextBlock 等) ,但是由于已经使用了大量的控件,我宁愿不这样做。

171570 次浏览

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

如果您有一个布尔型的粗体,您可以通过转换器进行绑定(比如)。

查看 Charles Petzold 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;
}
}
}

您可以很容易地在 XAML 中完成这项工作:

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

有各种 Inline元素可以帮助您,对于最简单的格式选项,您可以使用 BoldItalicUnderline:

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

enter image description here

我认为值得注意的是,这些元素实际上只是设置了各种属性的 Span元素的简写(即: 对于 BoldFontWeight属性设置为 FontWeights.Bold)。

这就带来了我们的下一个选项: 前面提到的 Span元素。

您可以使用这个元素实现与上面相同的效果,但是您被赋予了更多的可能性; 您可以设置(除其他外) ForegroundBackground属性:

<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

Span元素还可以包含下面这样的其他元素:

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

enter image description here

还有一个元素,它与 Span非常相似,叫做 RunRun不能包含其他内联元素,而 Span可以,但是您可以轻松地将一个变量绑定到 RunText属性:

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

一个好的网站,有很好的解释:

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

在这里,作者为您提供了很好的例子,您正在寻找什么!总的来说,该网站是伟大的研究材料加上它涵盖了大量的选择,你在 WPF

Edit

有不同的方法来格式化文本。一个基本的格式(我认为最简单的) :

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

示例1显示了使用 大胆 意大利语和下划线文本的基本格式。

下面包含了 SPAN 方法,用这个 you van 突出显示文本:

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

详细说明请查看网站!

例子

这就是我的解决办法。

    <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! :)