将简单HTML转换为RichTextBlock

时间:2012-12-05 18:02:07

标签: html wpf xaml windows-8 richtextblock

我从Windows 8开始,我正在尝试将HTML转换为RichTextBlock

have read我可以在HtmlUtilities.ConvertToText中使用此功能:TextBlock,但我找不到在RichTextBlock中使用此功能的方法!

根据我的理解并尝试I can't extend RichTextBlock所以每次调用RichTextBlock时我都无法应用此功能。

另外,我找不到任何方法将文本绑定到RichTextBlockbuilding a parser只是为了简单的HTML(我只想要段落和斜体/粗体)似乎有点矫枉过正。另外,我不知道我应该在哪里进行这种解析,因为我RichTextBlock似乎无法实现。

我无法使用WebView,因为我需要透明度(以及我阅读WebView doesn't have it的内容)。

修改

@mydogisbox让我觉得我的研究工作太过分了。

我可以在HtmlUtilities.ConvertToText中绑定的属性的getter中使用RichTextBlock。我无法绑定它,因为我试图这样做                     <Run Text="{Binding TextHTML}" />没有<Paragraph>标记。

HtmlUtilities.ConvertToText不保留斜体或粗体。只有段落:/。

1 个答案:

答案 0 :(得分:3)

我最终使用了从HTML转换为RickTextBlock的package avaiable on gitHub

基本上,您只需要打开包管理器控制台(工具&gt;库包管理器&gt;包管理器控制台)和install the package运行Install-Package RichTextBlock.Html2Xaml

然后打开RichTextBlockProperties.cs,您就拥有了需要复制的行。在我的情况下,我不得不添加命名空间:

xmlns:rtbx="using:EventTests.Common"

然后,您可以使用以下命令绑定包含HTML的属性:

<RichTextBlock rtbx:Properties.Html="{Binding ...}"/>

一些问题和一些解决方案

我在这个库中发现的一个问题是它如何处理没有div的简单html。像:

<p>Testing <i>italic</i> and something more.</p>
<p>More testing </p>

打印:

  

测试斜体等等。   
更多测试

但是,我想要这样的事情:

  

测试斜体等等。

     

更多测试

所以我必须将第二段包装在一个div中(除了第一段之外的所有段落都可以包装)。

<p>Testing <i>italic</i> and something more.</p>
<div><p>More testing </p></div>

如果你包装第一段,那么你将有一个额外的新行。

到目前为止,这是我找到的最佳解决方案。如果你发现我更好,我会对它进行测试和学习。如果你找到更好的解决方案,我会接受你的。

小心

如果你有像“&lt;”这样的符号,这种方法会崩溃或“&amp;”在你的HTML中。我建议您在尝试使用此库之前替换这些字符。