如何格式化 TextBlock 中的文本?

Posted

技术标签:

【中文标题】如何格式化 TextBlock 中的文本?【英文标题】:How can I format text in a TextBlock? 【发布时间】:2013-05-28 14:42:50 【问题描述】:

我正在尝试制作由多个 TextBlocks 组成的单个文本块

- 目标

例如,我想实现如下行:

“我在 ListBox 中阅读了这一行,注意多个文本格式

我正在尝试做的方式是

<StcakPanel Orientation="Horizontal" Width="400" >

   <TextBlock Text="I read this line in a " TextWrapping="Wrap" />
   <TextBlock Text="ListBox"  FontStyle="Italic" TextWrapping="Wrap"/>
   <TextBlock Text=", notice the multiple " TextWrapping="Wrap" />
   <TextBlock Text="text formatting" FontWeight="Bold" TextWrapping="Wrap"/>

<StcakPanel>

- 问题

尽管为 TextBlocks 设置了 TextWrapping 并为 StackPanel 设置了宽度,但该文本不适合 StackPanel。

我想在运行时生成此代码。我不知道我需要格式化多少字。

用突出显示的搜索关键字显示 SearchResults。

- 问题

如何使用 StackPanel 或其他方法来实现上述目标?有以下约束。

文本长度未知 堆栈面板中的文本块数量未知 宽度和高度未知

非常感谢

【问题讨论】:

【参考方案1】:

您应该使用单个&lt;TextBlock&gt;,它可以包含多个&lt;Run&gt;,每个&lt;Run&gt;s 可以有自己的格式。如果要插入换行符,可以使用&lt;Linebreak /&gt;控件。

<StackPanel Orientation="Horizontal" Width="400" >
    <TextBlock>
       <Run Text="I read this line in a" />
       <Run Text="ListBox" FontStyle="Italic" />
       <Run Text=", notice the multiple" />
       <Run Text="text formatting" FontWeight="Bold" />
    </TextBlock>
<StackPanel>

那时您可能甚至不需要&lt;StackPanel&gt;,除非您将多个&lt;TextBlocks&gt; 堆叠在一起。

有关更多信息和示例,请参阅此帖子:http://www.danderson.me/posts/working-with-the-wpf-textblock-control/


要在 TextBlock 中对多个运行进行数据绑定,请参阅此答案:Databinding TextBlock Runs in Silverlight / WP7

【讨论】:

如何在运行时执行此操作?我可以在运行时使用多个 RUN 吗? 您可以在运行时将 Runs 作为 TextBlock 的子项插入。请参阅我的编辑以了解如何执行此操作,或者使用类似于myTextBlock.Children.Add(new Run()); 的代码手动添加控件

以上是关于如何格式化 TextBlock 中的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TextBlock 绑定到包含格式化文本的资源?

如何在不破坏文本换行的情况下保存和格式化wpf UserControl中的内容?

在 wpf 中的格式化文本中设置上标和下标

WPF 绑定:如何将文件路径列表中的名称绑定到 ListBox 中 TextBlock 的文本?

字符串属性中的换行符

如何将 TextBlock(字体大小)增大/缩小到 WPF 中的可用空间?