Xaml 自动检测文本块中的URL、电话号码、电子邮件

Xaml 自动检测文本块中的URL、电话号码、电子邮件,xaml,uwp,textblock,richtextblock,Xaml,Uwp,Textblock,Richtextblock,我想在UWP中自动突出显示URL、电子邮件和电话号码。这在安卓系统中是可能的,但微软似乎已经忘记了这一功能。 在我的用例中,我从web服务获取文本,因此我不知道用户在web平台上输入的文本格式。平台还不支持此功能。当我不得不做同样的事情时,我以我自己的解决方案结束,即: 创建接收要格式化的文本的附加属性 使用一些正则表达式从中提取URL、电话号码和电子邮件地址 生成一个Inlines集合,我将其注入到附加的TextBlock控件中 使用的正则表达式覆盖了很多情况,但仍然可能缺少一些边缘情况

我想在UWP中自动突出显示URL、电子邮件和电话号码。这在安卓系统中是可能的,但微软似乎已经忘记了这一功能。
在我的用例中,我从web服务获取文本,因此我不知道用户在web平台上输入的文本格式。

平台还不支持此功能。当我不得不做同样的事情时,我以我自己的解决方案结束,即:

  • 创建接收要格式化的文本的附加属性
  • 使用一些正则表达式从中提取URL、电话号码和电子邮件地址
  • 生成一个Inlines集合,我将其注入到附加的TextBlock控件中
使用的正则表达式覆盖了很多情况,但仍然可能缺少一些边缘情况

它是这样使用的:

<TextBlock  uwpext:TextBlock.InteractiveText="Here is a link www.bing.com to send to a@a.com or 0000000000" />

随附的财产代码:

//-------------------------------------------------------------------------------------------
/// 
///用于从文本内容检测URL的正则表达式
///它来自https://gist.github.com/gruber/249502 (http://daringfireball.net/2010/07/improved_regex_for_matching_urls)
/// 
(2)b(以下以下以下:(:(a-z)[[w-[[[w-)以下以下两个::::::::[a-z[[a-z][[w-][:::::::::::::::::::::{1,3}[1-3-0-10-10-纯纯纯纯非非政府政府政府现时现时现时现时只只纯纯纯纯纯纯纯纯政府政府政府政府政府政府现时现时现时只只只只只只只只只只只只只只只只(公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众公众人士(只只准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准政府政府政府政府政府政府政府政府政府现时现时现时现时现时现时现时现时现时现时现时现时现时现时现时的公众公众公众公众公众公众公众124;[^\ s`!()\[\]{};:',?«»“'')”,RegexOptions.IgnoreCase,TimeSpan.frommilluses(500));
// -------------------------------------------------------------------------------------------
/// 
///用于检测电子邮件地址的正则表达式
///它来自https://msdn.microsoft.com/en-us/library/01escwtf.aspx
/// 

private static readonly Regex EmailRegex=new Regex(@“(?”)(“+?”)感谢您的代码,但我似乎有一个问题。我在初始化时遇到一个错误:“Le texte associéce code d'erreur est introvable。未能分配到属性'MyProject.TextBlockExtensions.InteractiveText'。[行:38位置:20]"如果没有进一步的详细信息,很难看出哪里出了问题。根据错误消息,您的控件可能存在类型问题。该属性只能绑定到文本框。如果尝试将其绑定到其他对象,则会引发此类错误。有关详细信息,请参阅此问题:。您还可以从此处找到有用的信息:。希望它帮助了Hanks Vincent,我发现了我的错误:我的扩展类不是公共的。现在它似乎工作得很好。很好的解决方案!我稍微修改了一下phone正则表达式,只包含了独立的号码:
(^\s)\+?[(()0-9\s-/]{5,}($\s)
(匹配“Call:01189998819991197253”,但不匹配“Errorcode\u 011899988199917253”)