Xaml 检测RichTextBlock中的超链接';考虑动态内容的s纯文本

Xaml 检测RichTextBlock中的超链接';考虑动态内容的s纯文本,xaml,windows-runtime,windows-phone-8.1,richtextblock,Xaml,Windows Runtime,Windows Phone 8.1,Richtextblock,假设我们有一个RichTextBlock: <RichTextBlock IsTextSelectionEnabled="True"> <Paragraph> <Run Text="{Binding Description}" /> </Paragraph> </RichTextBlock> 是否可以检测内容中可能存在的超链接,以便当用户单击它们时,web浏览器应用程序将打开 例如,假设Descri

假设我们有一个RichTextBlock:

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

是否可以检测内容中可能存在的超链接,以便当用户单击它们时,web浏览器应用程序将打开

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

“欢迎来到Stackoverflow。您可以在找到快速指南。要跟踪您的问题,请访问。快乐编码!”

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

文本选择设置为disabled是我必须满足的要求之一,尽管这至少有助于复制粘贴链接


非常感谢您的任何建议

您需要解析整个HTML,不-不要像某人建议的那样使用正则表达式(正则表达式不能解析HTML)-从Nuget manager安装HtmlAgilityPack(这不是格式良好的HTML文档没关系,HtmlAgilityPack可以完成它的工作)

请随意选择和调整我的XamlHtmlParser(目前并非一切都正常-这确实是早期开发阶段,但您可以使用其中的几个类来解析超链接、换行符等),从我的开源类似reddit的服务应用程序实现:

如果您想要您的超链接“导航”,请在
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);

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

我只有一个选择,那就是使用正则表达式查找典型的链接代码,如“我想到了一个类似的。。。处理方法,但我认为可能已经有了一个解决方案,而不需要太多的代码。但无论如何,Description属性的字符串不是html格式。这是纯文本。链接是谁或如何构造的?它必须有某种东西来识别它。它没有太多的代码,但regex是“有趣的”:)它只是一个绑定在UI上的字符串,它不是以任何方式构建的。但是,如果字符串包含构成有效URL的一系列字符,则允许通过点击该链接来导航到该链接。然后使用相同的字符串查找该链接并对其执行任何操作。我们所说的没有HTML。只是一些纯文本,如“欢迎来到stackoverflow”或“欢迎来到ww.stackoverflow.com”。在第二种情况下,我希望“www.so.com”成为RichTextBlock中的超链接。在这种情况下,为什么正则表达式是一个糟糕的方法?@Vasilef-oh,所以我没有理解它-对不起。如果没有html,那么正则表达式就可以了-找到所有并从中创建超链接内联元素。“正则表达式不能解析html”正则表达式当然可以解析html…@Mark