我有一段文字要显示在清单中。其中有些文字包含超连结。我想让文字中的链接可以按一下。我可以想像这个问题的解决方案,但看起来并不太好。
例如,我可以将字符串拆分成超链接和非超链接,然后动态构建一个Textblock,适当地添加纯文本元素和超链接对象。
我希望有更好的,最好是声明性的。
例如:“嘿,看看这个链接:http://mylink.com这真的很酷。”
我有一段文字要显示在清单中。其中有些文字包含超连结。我想让文字中的链接可以按一下。我可以想像这个问题的解决方案,但看起来并不太好。
例如,我可以将字符串拆分成超链接和非超链接,然后动态构建一个Textblock,适当地添加纯文本元素和超链接对象。
我希望有更好的,最好是声明性的。
例如:“嘿,看看这个链接:http://mylink.com这真的很酷。”
5条答案
按热度按时间waxmsbnn1#
您需要能够在运行时解析TextBlock的Text并创建所有内联对象的程序。为此,您可以创建自己的自定义控件,该控件派生自TextBlock或附加属性。
对于解析,你可以用正则表达式在文本中搜索URL。我从A good url regular expression?借用了一个正则表达式,但是在网络上还有其他的正则表达式,所以你可以选择最适合你的。
在下面的示例中,我使用了一个附加属性。要使用它,请修改TextBlock以使用NavigateService.Text而不是Text属性:
贴附性质的代码如下所示:
tvz2xvvm2#
以下是简化版本:
siotufzp3#
像这样的东西?
编辑:如果你需要动态的,就绑定它。在上面的例子中,lvTopics(未显示)被绑定到一个带有Title和Url属性的对象列表。另外,它不会自动转到url,你需要用类似的代码来处理它:
我只是想告诉你,你可以在TextBlock中嵌入任何东西,包括Hyperlink,也可以在Hyperlink中嵌入任何东西。
rt4zxlrg4#
Bojan答案的VB.Net版本。我对它做了一些改进:此代码将把http://support.mycompany.com?username=x&password=y之类的url解析为内联的http://support.mycompany.com,同时仍然使用用户名和密码导航到完整的url
oyjwcjzk5#
如果您使用的是MVVM light或类似的架构,则可以在textblock mousedown属性上设置一个交互触发器,并在视图模型的代码中执行任何操作。