WPF文本块动态加粗和斜体部分

5

我正在使用MVVM模式,我的ModelView中有一个字符串类型属性。

该字符串可能包含以下HTML标签:

<b>, </b>, <i>, </i>  

我需要将TextBlock中的某些文本部分设置为普通、粗体或斜体。

目前,我已经创建了一个解决方案,一个辅助方法,它的工作原理如下:

  1. 将HTML字符串分解成部分

  2. 创建Run类的实例

  3. 根据标签设置FontWeight或FontStyle属性

  4. 将Run类的实例添加到TextBlock的Inlines集合中

这个解决方案可以工作,但是它不兼容MVVM模式。

我想使用Convertors,但我不确定应该绑定到TextBlock的哪个属性。

您认为应该如何解决这个问题?

2个回答

4

过去我做过的一件事是使用ContentControl,将Content属性绑定到一个字符串上,并使用ValueConverter返回一个动态创建的TextBlock。这里还可以找到其他解决方案,包括这个


将尝试使用ContentControl和BindableRun。谢谢! - Daniil Harik
很棒的解决方案!好吧,我更喜欢能够绑定到“Inlines”属性,但在缺乏这种支持的情况下,这是一个非常好的替代方案。值得注意的是,“Run”的“Text”属性现在是一个依赖属性,因此可以直接绑定而无需使用BindableRun。 - Mal Ross

1

我发现解决这个问题最简单的方法是:

使用BindableRichTextBox,可以在http://www.shawnduggan.com/?p=54找到。

  1. 使用转换器将HTML字符串转换为XAML,然后将其转换为FlowDocument对象

  2. 将文档绑定到BindableRichTextBox

  3. 使RichTextBox看起来像TextBlock(Focusable="False",BorderThinkness="0",BorderBrush="White"等)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接