在WPF中自定义绑定文本的最佳方法是什么

在WPF中自定义绑定文本的最佳方法是什么,wpf,controls,Wpf,Controls,正如标题所说,我需要自定义WPF中的部分文本,例如,我有一个短语“快速棕色狐狸跳过懒狗”,我需要加粗“棕色”一词,或者更改“狐狸”的背景/前景颜色。据我所知,常规WPF控件都不支持该功能,是否有开源/免费的替代方案 注意:控件应是可绑定的 谢谢。您可以使用HTML自定义文本。。你可以得到一组HTML代码 我很大程度上取决于您想要完成什么,但您可以按照建议使用WPF工具包的RichTextBox 或者,您可以按照建议将绑定功能添加到.Net RichTextBox 但是,如果您不需要像RichTe

正如标题所说,我需要自定义WPF中的部分文本,例如,我有一个短语“快速棕色狐狸跳过懒狗”,我需要加粗“棕色”一词,或者更改“狐狸”的背景/前景颜色。据我所知,常规WPF控件都不支持该功能,是否有开源/免费的替代方案

注意:控件应是可绑定的


谢谢。

您可以使用
HTML
自定义文本。。你可以得到一组HTML代码

我很大程度上取决于您想要完成什么,但您可以按照建议使用WPF工具包的RichTextBox

或者,您可以按照建议将绑定功能添加到.Net RichTextBox

但是,如果您不需要像RichTextBox这样复杂的东西。您可以使用ValueConverter,将要显示的文本更改为更适合您需要的文本。 像这样

根据需要,您还可以创建一个用户控件,使用依赖属性“Text”,在PropertyChanged上,将文本拆分为更小的部分,并将它们绑定到不同的“子属性”中,这些属性将在用户控件内的不同文本块(具有不同样式)中显示

更新(添加了我评论中的建议)


如果RichTextBox不是一个解决方案,并且UserControl也不是,那么可以使用ValueConverter通过TextBlock.Inline来实现这一点,比如

您可以使用
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属性
。所以,你也可以绑定它


请参阅Bindable Run。

您知道有支持html的控件吗?TextBlock不支持html标记。。。您在另一个控件中混淆了TextBlock…?
这是一个HTML代码。它适用于
TextBlock
RichTextBox与unicode字符有问题。它显示?嗯,我可以将TextBlock绑定到字符串(单词)数组吗要根据需要生成尽可能多的运行?
Run
作为
Inlines
添加到文本块,即,您可以这样做
textBox.Inlines.Add(new Run(){Text=“Brown”});
。但是
内联线
不是DP,因此您无法绑定它。但是,您可以使用转换器并在其中传递字符串数组绑定以及textBox,在那里您可以将内联线添加到textBlock。但是textBlock中没有内置的支持。或者必须对textBlock进行子类化,如
MyTextBlock
,并从中公开DP,然后可以在DP change中添加内联线的代码。谢谢,您的回答引导我找到了解决方案。我只是在VM中将文本分成3部分,并将其绑定到3次运行。这不是一个干净的解决方案,但它可以工作。