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

WPF文本块动态粗体和斜体部分,wpf,mvvm,binding,Wpf,Mvvm,Binding,我使用的是MVVM模式,我的ModelView中有字符串类型属性 该字符串可能包含以下HTML标记: <b>, </b>, <i>, </i> , 我需要将文本块中的某些部分设置为正常、粗体或斜体 目前,我已经创建了一个工作环境,一个助手方法,其工作方式如下: 将HTML字符串拆分为多个部分 创建运行类的实例 根据标记设置FontWeight或FontStyle属性 将Run类的实例添加到TextBlock的Inlines集合中 此解决方案

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

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

<b>, </b>, <i>, </i>  
我需要将文本块中的某些部分设置为正常、粗体或斜体

目前,我已经创建了一个工作环境,一个助手方法,其工作方式如下:

  • 将HTML字符串拆分为多个部分

  • 创建运行类的实例

  • 根据标记设置FontWeight或FontStyle属性

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

  • 此解决方案可行,但与MVVM模式不兼容

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


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

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

    我为这个问题找到的最简单的解决方案

    要使用BindableRichTextBox,请访问

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

  • 将文档绑定到BindableRichTextBox

  • 使RichTextBox看起来像TextBlock(Focusable=“False”、BorderThinkness=“0”、BorderBrush=“White”…等等)


  • 将尝试ContentControl和BindableRun。非常感谢。伟大的解决方案!好吧,我更希望能够绑定到
    内联线
    属性,但是如果没有这样的支持,这是一个非常好的选择。还值得注意的是,
    Run
    Text
    属性现在是一个依赖属性,因此无需BindableRun即可绑定到。