【问题标题】:WPF TextBlock dynamic bold and italic partsWPF TextBlock 动态粗体和斜体部分
【发布时间】:2010-10-16 15:55:21
【问题描述】:

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

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

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

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

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

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

  2. 创建 Run 类的实例

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

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

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

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

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

【问题讨论】:

    标签: wpf mvvm binding


    【解决方案1】:

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

    【讨论】:

    • 将尝试 ContentControl 和 BindableRun。谢谢!
    • 很好的解决方案!好吧,我更希望能够绑定到Inlines 属性,但是在没有这种支持的情况下,这是一个非常好的选择。还值得注意的是,RunText 属性现在是一个依赖属性,因此无需 BindableRun 即可绑定。
    【解决方案2】:

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

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

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

    2. 将文档绑定到 BindableRichTextBox

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

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 2016-01-02
      • 2012-12-10
      • 2022-01-20
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多