2010-09-07 154 views
1

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

例如,使用下面的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应用程序的“文本“数据库对象的属性,然后我使用绑定和转换器像这样:

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

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

注:我意识到有相当多的线程致力于将HTML转换为XAML。我已经提到了其中的大部分,但他们都缺乏这一特定步骤。任何帮助或链接表示赞赏,在此先感谢。

回答

2

对于您的示例,您将xaml作为文本并绑定到Text-property。这只会将xaml显示为文本。

如果有一种直接的方式将其作为FlowDocument的内容绑定,我不知道。由于FlowDocument的结构,这是不可能的。但也许有人知道一种方式,并为此发布解决方案。

要手动完成,请看this page的示例。在那里我看到作者将一个XAML字符串加载到RichTextBox中。您可以根据需要更改代码(RichtTextBox也适用于FlowDocs)。搜索公共静态类RichTextboxAssistant,有您寻找的代码。照顾编码。他使用ASCII。也许你必须将其更改为UTF。

希望这会有所帮助。

+0

我最终使用该RichTextboxAssistant类的一个版本来扩展Document属性作为依赖属性,以便我可以绑定到它。然后,我不得不删除RichTextEditor的边框和背景颜色,以便文本显示在背景上,而不是在TextBox中。不是最好的解决方案,但它的工作! – 2010-09-09 17:14:14

1
  • 对于以前的.NET版本4.0:在this link,文森特·范登BERGHE解释如何扩展的FlowDocument支持 '可绑定运行',检查出来

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