WPF TextBlock动态粗体和斜体部分

时间:2009-03-31 16:50:23

标签: wpf mvvm binding

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

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

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

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

现在我已经创建了一个解决方法,一个像这样工作的辅助方法:

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

  2. 创建Run class

  3. 的实例
  4. 根据标记,设置FontWeight或FontStyle属性

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

  6. 此解决方案有效,但与MVVM模式不兼容。

    我在考虑使用转换器,但我不确定应该绑定哪个TextBlock属性。

    您怎么看,这个问题怎么解决?

2 个答案:

答案 0 :(得分:4)

我过去做过的事情是使用ContentControl,Content属性绑定到字符串,ValueConverter返回动态创建的TextBlock。其他解决方案可在此处找到,包括this one

答案 1 :(得分:1)

我找到的最简单的解决方案。

是否使用BindableRichTextBox,可以在http://www.shawnduggan.com/?p=54

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

  2. 将文档绑定到BindableRichTextBox

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