考虑动态内容,检测RichTextBlock纯文本中的超链接

时间:2015-01-10 21:08:13

标签: xaml windows-runtime windows-phone-8.1 richtextblock

假设我们遇到了RichTextBlock的这种情况:

<RichTextBlock IsTextSelectionEnabled="True">
    <Paragraph>
        <Run Text="{Binding Description}" />
    </Paragraph>
</RichTextBlock>

是否有可能检测到内容中可能的超链接,以便当用户点击它们时,Web浏览器应用程序将会打开?

例如,假设Description属性包含以下字符串:

“欢迎使用Stackoverflow。您可以在http://www.stackoverflow.com/guide找到快速指南。要跟踪您的问题,请访问http://www.stackoverflow.com/questions。快乐的编码!”

目前,这个确切的字符串已绑定在UI上,但我希望能够以某种方式检测可能的链接,并在点击它们时能够导航到它们,就像使用Web浏览器一样。

设置为禁用的文本选择是我必须满足的要求之一,至少可以帮助复制粘贴链接。

任何建议都非常感谢!

1 个答案:

答案 0 :(得分:0)

你需要解析整个HTML而地狱没有 - 不要像正在建议的正则表达式那样使用正则表达式(正则表达式无法解析html) - 从Nuget管理器安装HtmlAgilityPack(无关紧要的是格式不正确的html文档,HtmlAgilityPack会做它的工作)。

随意挑选和调整我的XamlHtmlParser(目前并非一切都很好 - 它真的是eeearly dev阶段,但你可以使用它中的几个类来解析超链接,换行等...)来自我的开源rubd reddit类似服务应用实施:https://github.com/thefex/Wykop/tree/dev_windows81_api/Wykop.ApiProvider/XamlParser

如果您想要超链接“导航”,请在HyperLinkNodeParser课程中添加正确的“NavigateUri”。

用法:

XamlHtmlParser htmlParser = new XamlHtmlParser(new DefaultHtmlNodeParserProvider());
RichTextBlock richTextBlock = ..;
var parsedHtmlBlocks = htmlParser.GetBlocksFromHtmlString(htmlLikeString);
richTextBlock.Blocks.Clear();

foreach (var parsedBlock in parsedHtmlBlocks)
   richTextBlock.Blocks.Add(parsedBlock);

顺便说一下。似乎绑定是不可能的 - 代码隐藏必须是。