在TextBlock中格式化文本

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

例如:我想用粗体字来表示某些词,其他的用斜体表示,有些用不同的颜色表示,例如:

在这里输入图像说明

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

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

我希望string的第二部分是大胆的,我知道我可以使用两个控件(标签,TextBlocks等),但我宁愿不,因为已经使用了大量的控件。

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

你可以通过转换器绑定,如果你有一个布尔(说)的粗体。

你可以很容易地在XAML中做到这一点:

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

查看Charles Petzolds Bool Application = Code +标记中的这个例子

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

有各种Inline元素可以帮助你,最简单的格式化选项,你可以使用BoldItalicUnderline

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

在这里输入图像说明

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

这带来了我们的下一个select:前面提到的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> 

在这里输入图像说明

Span元素也可能包含这样的其他元素:

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

在这里输入图像说明

还有另外一个和Span很相似的元素,叫做RunRun不能包含其他内联元素,而Span可以,但是你可以很容易地绑定一个variables到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."); 

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

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显示了使用Bold Itallic和下划线文本的基本格式。

以下内容包含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函数及其不同的可能性。

有关详细的解释,请检查网站!

例子