如何在WPF应用程序中的TextBlock
控件内实现文本格式化?
例如:我希望有一些粗体字,有些字用斜体字,有些用不同颜色,比如这个例子:
我的问题背后的原因是这个实际问题:
lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();
我希望字符串的第二部分是粗体,我知道我可以使用两个控件(Labels,TextBlocks等),但我不愿意,因为已经使用了大量的控件。
答案 0 :(得分:121)
您需要使用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>
如果您使用粗体作为布尔值(例如),则可以通过转换器进行绑定。
答案 1 :(得分:92)
您可以在XAML中轻松完成此操作:
<TextBlock>
Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>
答案 2 :(得分:43)
查看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;
}
}
}
答案 3 :(得分:41)
有各种Inline
元素可以为您提供帮助,您可以使用最简单的格式选项Bold
,Italic
和Underline
:
<TextBlock>
Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
</TextBlock>
我认为值得注意的是,这些元素实际上只是具有各种属性集的Span
元素的缩写(即:对于Bold
,FontWeight
属性设置为{ {1}})。
这将我们带到下一个选项:前面提到的Span
元素。
你可以使用上面这个元素获得相同的效果,但你获得了更多的可能性;您可以设置(以及其他)FontWeights.Bold
或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>
非常相似的元素,它被称为Run
。 Span
可以包含Run
其他内联元素,但您可以轻松地将变量绑定到Span
Run
属性:
Text
此外,如果您愿意,可以从代码隐藏中进行整个格式化:
<TextBlock>
Username: <Run FontWeight="Bold" Text="{Binding UserName}"/>
</TextBlock>
答案 4 :(得分: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显示了粗体 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显示了跨度函数以及它的不同可能性。
有关详细说明,请查看网站!
答案 5 :(得分: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>
我正在学习...所以,如果有人对上述解决方案有兴趣,请分享! :)