首页 > 解决方案 > 如何使用来自 UWP 应用的 XAML 在 TextBlock 中显示 HTML 内容?

问题描述

在 JSON 响应中:

results =  "<p>This is a <b>paragraph</b></p><p>New paragraph with symbols &gt; tags</p>";

XAML:

<Textblock  Text={Binding results}/>

结果:

This is a **paragraph** New Word
New paragraph with symbols > tags

标签: htmlxamluwp

解决方案


您可以使用RichTextBlockXAML 输出更轻松地匹配 HTML DOM。不幸的是,没有内置的 API 可以将 HTML 转换为控件的等效 XAML。

您可以使用手动将 HTML 解析为已知标签HtmlAgilityPack并添加项目。RichTextBlock.Inlines有一篇关于这个过程的旧文档文章,但它仍然适用。它显示的示例之一:

private static Inline GenerateBlockForNode(HtmlNode node)
{
    switch (node.Name)
    {
        case "div":
            return GenerateSpan(node);
        case "p":
        case "P":
            return GenerateInnerParagraph(node);
        case "img":
        case "IMG":
            return GenerateImage(node);
        ...

然后各个GenerateXXX方法生成适当的内联:

private static Inline GenerateSpan(HtmlNode node)
{
    Span s = new Span();
    AddChildren(s, node);
    return s;
}

最简单的解决方案是使用这个 GitHub repo中的代码,它实现了很多标签转换,也许您可​​以将转换器复制粘贴到您的项目并开始运行。


推荐阅读