将简单的HTML转换为RichTextBlock

我开始使用Windows 8,并试图将HTML转换为RichTextBlock

我已经读过,我可以使用这个函数: TextBlock HtmlUtilities.ConvertToText ,但我找不到在RichTextBlock使用此函数的方法!

从我的理解和尝试,我无法扩展RichTextBlock所以每次调用RichTextBlock都无法应用此函数。

此外,我找不到任何方法将文本绑定到RichTextBlock并为简单的HTML构建解析器(我只想要段落和斜体/粗体)看起来是一种矫枉过正。 此外,我不知道我应该在哪里解析,因为我的RichTextBlock似乎无法扩展。

我无法使用WebView因为我需要透明度(并且从我读过的WebView中没有它)。

编辑

@mydogisbox让我看到我的研究太过分了。

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

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


我最终在gitHub上使用了一个可从HTML转换为RickTextBlock的包。

基本上,您只需打开程序包管理器控制台(工具>程序包程序包管理器>程序包管理器控制台)并安装运行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>

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

到目前为止,这是我找到的最佳解决方案。 如果你觉得更好,我会在测试和学习之后加以补充。 如果你找到更好的解决方案,我会接受你的。

小心点

如果你的html中有符号“<”或“&”,这种方法会崩溃。 我建议你在尝试使用这个库之前替换这些字符。

链接地址: http://www.djcxy.com/p/11545.html

上一篇: Convert simple HTML to a RichTextBlock

下一篇: A/B, multivariant testing with spring MVC