我从Windows 8开始,我正在尝试将HTML转换为RichTextBlock
。
我have read我可以在HtmlUtilities.ConvertToText
中使用此功能:TextBlock
,但我找不到在RichTextBlock
中使用此功能的方法!
根据我的理解并尝试I can't extend RichTextBlock
所以每次调用RichTextBlock
时我都无法应用此功能。
另外,我找不到任何方法将文本绑定到RichTextBlock
和building a parser只是为了简单的HTML(我只想要段落和斜体/粗体)似乎有点矫枉过正。另外,我不知道我应该在哪里进行这种解析,因为我RichTextBlock
似乎无法实现。
我无法使用WebView
,因为我需要透明度(以及我阅读WebView doesn't have it的内容)。
修改
我可以在HtmlUtilities.ConvertToText
中绑定的属性的getter中使用RichTextBlock
。我无法绑定它,因为我试图这样做
<Run Text="{Binding TextHTML}" />
没有<Paragraph>
标记。
但HtmlUtilities.ConvertToText
不保留斜体或粗体。只有段落:/。
答案 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中。我建议您在尝试使用此库之前替换这些字符。