【发布时间】:2014-02-28 09:35:28
【问题描述】:
正如标题所说,我需要在WPF中自定义部分文本,例如我有一个短语“The quick brown fox jumps over the lazy dog”,我需要将“brown”这个词加粗,或者改变背景/“狐狸”的前景色。据我所知,常规的 WPF 控件都不支持该功能,是否有任何开源/免费的替代方案?
附:控件应该是可绑定的
谢谢。
【问题讨论】:
正如标题所说,我需要在WPF中自定义部分文本,例如我有一个短语“The quick brown fox jumps over the lazy dog”,我需要将“brown”这个词加粗,或者改变背景/“狐狸”的前景色。据我所知,常规的 WPF 控件都不支持该功能,是否有任何开源/免费的替代方案?
附:控件应该是可绑定的
谢谢。
【问题讨论】:
我很大程度上取决于您想要完成的任务,但您可以按照建议 here 使用 WPF 工具包的 RichTextBox。
或者您可以按照here 的建议将绑定功能添加到 .Net RichTextBox。
但是,如果您不需要像 RichTextBox 这样复杂的东西。您可以使用 ValueConverter 并将要显示的文本更改为更适合您需要的内容。 喜欢这个example。
还取决于您的需要,您可以创建一个用户控件,具有一个依赖属性“文本”,在 PropertyChanged 上,您将文本分成更小的部分,并将它们绑定在不同的“子属性”中将显示在用户控件内的不同文本块(具有不同样式)中。
更新(添加了我评论中的建议)
如果 RichTextBox 和 UserControl 都不是解决方案,您可以使用 ValueConverter 通过 TextBlock.Inline 完成此操作,例如 here。
【讨论】:
您可以使用Run 来装饰您的文字。
<TextBlock>
<Run>The quick </Run>
<Run FontWeight="Bold" Background="Yellow">brown</Run>
<Run Foreground="Red"> fox </Run>
<Run>jumps over the lazy dog.</Run>
</TextBlock>
输出:
此外,如果您使用的是 WPF 4.0 及更高版本,Microsoft 已将 Run 的 Text 属性作为依赖属性而不是普通的 CLR 属性。所以,你也可以绑定它。
请参阅here 了解可绑定运行。
【讨论】:
Run 被添加为 Inlines 到 TextBlock 即你可以这样做 textBox.Inlines.Add(new Run() { Text ="Brown" });。但是Inlines 不是 DP,所以你不能绑定它。但是,您可以在其中使用转换器并将字符串数组绑定与 textBox 一起传递,然后您可以将内联添加到 textBlock。但是 TextBlock 中没有内置支持。或者要么必须继承 TextBlock 说 MyTextBlock 并从中公开 DP,并且可以将添加内联的代码放入 DP 更改中。
你可以利用HTML来自定义文本..你可以得到一组HTML代码here...
【讨论】:
&quot; 这是一个 HTML 代码,对。它适用于 TextBlock