【问题标题】:Convert simple HTML to a RichTextBlock将简单的 HTML 转换为 RichTextBlock
【发布时间】:2012-12-05 18:02:07
【问题描述】:

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

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

根据我的理解和尝试 I can't extend RichTextBlock 所以我不能在每次调用 RichTextBlock 时应用这个函数。

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

我不能使用WebView,因为我需要透明度(根据我阅读的WebView doesn't have it)。

编辑

@mydogisbox 让我发现我的研究太过分了。

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

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

【问题讨论】:

  • 您应该能够在绑定到 RichTextBlock 的属性中调用 ConvertToText 函数。你这样做有什么问题?
  • 上帝。我完全迷失在我的研究中。我遇到了<Run Text> 的问题。现在我意识到我需要一个<Paragraph> 才能使用它。在看到您的评论之前,我已将其绑定并尝试使用转换器。转换器崩溃了,但在我看到你的评论后,我改变了我的财产的吸气剂,现在正在工作!但是,我发现HtmlUtilities.ConvertToText 不会转换斜体/粗体。我只需要斜体、粗体和段落:/。打算更新问题。感谢您的评论。
  • 如果您只需要这三个,那么也许您可以制作一个简单的解析器,将这三个内容转换为 html 中的文本,然后您可以在通过 ConvertToText 运行后再次解析,将它们解析为斜体等
  • 假设我做那个解析(我将把那个解决方案留到最后)。如何将“生成”树添加到 xaml?我仍然可以将解析与模型绑定和分离吗?自从我今天进入 Windows 8 后有点迷失了:p
  • 我想是的。您将只有一个将 html 转换为您的 html 类型的方法,然后将另一个方法将 ConvertToText 的结果转换为 RichTextBox 可以显示的内容。应该只是在属性中链接方法调用。

标签: html wpf xaml windows-8 richtextblock


【解决方案1】:

我最终使用了一个package avaiable on gitHub,它将 HTML 转换为 RickTextBlock。

基本上你只需要打开包管理器控制台(工具>库包管理器>包管理器控制台)和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>

打印出来:

测试 italic 等等。
更多测试

但是,我想要这样的东西:

测试 italic 等等。

更多测试

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

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

如果您将第一段换行,那么您将有一个额外的新行。

到目前为止,这是我找到的最佳解决方案。如果您发现更好,我会欣赏它,因为我正在测试和学习。如果你找到更好的解决方案,我会接受你的。

小心

如果您的 html 中有“

【讨论】:

  • 我最终编辑了随附的 xslt 以将 Margin="0,10,0,0" 添加到 标记中。同样的结果,或多或少。请注意,由于我的容器已经排好,我不介意第一段也有边距......
  • 关于“小心”部分的问题。我在我的 html 中遇到异常,并且有一些包含“
  • 我正在通过服务获取 html。我可以对那个字符串或类似的东西进行编码吗???
  • 我通过这个 System.Net.WebUtility.HtmlEncode(obj.DescriptionEN);现在它没有给出错误异常,而是用标签打印整个 html :(
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 2015-01-03
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
相关资源
最近更新 更多