【问题标题】:WPF FlowDocument BindingWPF FlowDocument 绑定
【发布时间】:2011-04-09 09:24:57
【问题描述】:

我正在使用 Microsoft 的 XAML/HTML converter 将 HTML 从数据库转换为 XAML 字符串。 Microsoft 转换器似乎正确地格式化了文本,但我无法将输出绑定到 XAML 对象。

例如,使用以下 HTML:

<span style="font-weight: bold; font-family: Georgia; color: rgb(0, 96, 144); text-decoration: underline;">Hello world.</span>

我会得到 XAML 输出:

<Section xml:space="preserve" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph>
    <Run FontWeight="bold" TextDecorations="Underline" FontFamily="georgia">Hello world.</Run>
</Paragraph>

假设 HTML 作为数据库对象的“文本”属性进入 WPF 应用程序,然后我使用 Binding 和 Converters,如下所示:

<TextBlock Text="{Binding Path=ActiveDataItem.Text, Converter={StaticResource convertHTMLToXaml}}" />

不幸的是,这只是将 XAML 打印到页面而不解析它。我假设这是因为我绑定到 TextBlock 并且这是预期的结果。我的问题是如何将此输出绑定到与 FlowDocument 相关的控件,如段落、运行、部分或其他?

注意:我意识到有很多线程专门用于将 HTML 转换为 XAML。我已经引用了其中的大多数,但在这个特定步骤上都缺少它们。感谢您提供任何帮助或链接,在此先感谢。

【问题讨论】:

    标签: wpf xaml binding


    【解决方案1】:

    对于您的示例,您将 xaml 作为文本并绑定到文本属性。这仅将 xaml 显示为文本。

    是否有直接的方法将其绑定为 FlowDocument 的内容,我不知道。由于 FlowDocument 的结构,IMO 这是不可能的。但也许有人知道一种方法并向您发布解决方案。

    要手动执行,请查看this page (dead link, see Archive.org) 的示例。在那里,我看到作者将 XAML 字符串加载到 RichTextBox 中。您可以根据需要更改代码(RichtTextBox 也适用于 FlowDocs)。搜索public static class RichTextboxAssistant,有你要找的代码。注意编码。他使用 ASCII。也许您必须将其更改为 UTF。

    希望这会有所帮助。

    【讨论】:

    • 我最终使用 RichTextboxAssistant 类的一个版本将 Document 属性扩展为 Dependency 属性,以便我可以绑定到它。然后我必须删除 RichTextEditor 的边框和背景颜色,以便文本看起来在背景上,而不是在 TextBox 内。不是最好的解决方案,但它确实有效!
    • 链接已失效。
    【解决方案2】:
    • 对于 4.0 之前的 .NET 版本:在 this link,Vincent Van Den Berghe 解释了如何扩展 FlowDocument 以支持“可绑定运行”,请查看

    • 对于 .NET 4.0:Run.Text 属性是可绑定的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多