假设我们遇到了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浏览器一样。
设置为禁用的文本选择是我必须满足的要求之一,至少可以帮助复制粘贴链接。
任何建议都非常感谢!
答案 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);
顺便说一下。似乎绑定是不可能的 - 代码隐藏必须是。