如何格式化 TextBlock 中的文本?
Posted
技术标签:
【中文标题】如何格式化 TextBlock 中的文本?【英文标题】:How can I format text in a TextBlock? 【发布时间】:2013-05-28 14:42:50 【问题描述】:我正在尝试制作由多个 TextBlock
s 组成的单个文本块
- 目标
例如,我想实现如下行:
“我在 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】:您应该使用单个<TextBlock>
,它可以包含多个<Run>
,每个<Run>
s 可以有自己的格式。如果要插入换行符,可以使用<Linebreak />
控件。
<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>
那时您可能甚至不需要<StackPanel>
,除非您将多个<TextBlocks>
堆叠在一起。
有关更多信息和示例,请参阅此帖子: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 中的文本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不破坏文本换行的情况下保存和格式化wpf UserControl中的内容?