2016-11-25 67 views
0

我有一個TextBlock,其數據來自JSON。我想如果文本塊阻止網站地址或電子郵件,文本顏色變爲藍色,用戶可以點擊(如果電子郵件地址將轉到電子郵件應用程序,並且用戶可以直接寫入電子郵件地址,同時,如果網站地址,它會立即打開網頁瀏覽器)。 XAML:Detect是文本塊上的網站地址或電子郵件地址

<TextBlock x:Name="DetailDeskripsi" Width="290" Text="{Binding Deskripsi}" VerticalAlignment="Top" HorizontalAlignment="Left" Height="auto" TextWrapping="Wrap" FontSize="15" TextAlignment="Justify" Foreground="#FFCA6402"/> 

http://.../mobileapp/GetPostByCategoryXMLa?term_id=378 JSON數據示例: JSON

我該如何申請呢?

+0

Stanislav Kniazev的回答應該有幫助。 http://stackoverflow.com/questions/2092890/add-hyperlink-to-textblock-wpf – HebeleHododo

+0

它不是wpf,但在uwp – Rose

+0

什麼屬性* Deskripsi *?我想你可以看看[這個答案](http://stackoverflow.com/a/27742886/2681948)。 – Romasz

回答

0

我修改了一下answer from here,現在它處理綁定字符串,搜索網站和電子郵件地址。一旦它找到一個,它創建一個超鏈接,它應該啓動電子郵件應用程序或網頁瀏覽器。

爲TextBlock的增廣代碼:

public static class TextBlockExtension 
{ 
    public static string GetFormattedText(DependencyObject obj) 
    { return (string)obj.GetValue(FormattedTextProperty); } 

    public static void SetFormattedText(DependencyObject obj, string value) 
    { obj.SetValue(FormattedTextProperty, value); } 

    public static readonly DependencyProperty FormattedTextProperty = 
     DependencyProperty.Register("FormattedText", typeof(string), typeof(TextBlockExtension), 
     new PropertyMetadata(string.Empty, (sender, e) => 
     { 
      string text = e.NewValue as string; 
      var textBl = sender as TextBlock; 
      if (textBl != null && !string.IsNullOrWhiteSpace(text)) 
      { 
       textBl.Inlines.Clear(); 
       Regex regx = new Regex(@"(http(s)?://[\S]+|www.[\S]+|[\S][email protected][\S]+)", RegexOptions.IgnoreCase); 
       Regex isWWW = new Regex(@"(http[s]?://[\S]+|www.[\S]+)"); 
       Regex isEmail = new Regex(@"[\S][email protected][\S]+"); 
       foreach (var item in regx.Split(text)) 
       { 
        if (isWWW.IsMatch(item)) 
        { 
         Hyperlink link = new Hyperlink { NavigateUri = new Uri(item.ToLower().StartsWith("http") ? item : $"http://{item}"), Foreground = Application.Current.Resources["SystemControlForegroundAccentBrush"] as SolidColorBrush }; 
         link.Inlines.Add(new Run { Text = item }); 
         textBl.Inlines.Add(link); 
        } 
        else if (isEmail.IsMatch(item)) 
        { 
         Hyperlink link = new Hyperlink { NavigateUri = new Uri($"mailto:{item}"), Foreground = Application.Current.Resources["SystemControlForegroundAccentBrush"] as SolidColorBrush }; 
         link.Inlines.Add(new Run { Text = item }); 
         textBl.Inlines.Add(link); 
        } 
        else textBl.Inlines.Add(new Run { Text = item }); 
       } 
      } 
     })); 
} 

而且在XAML代碼:

<TextBlock extension:TextBlockExtension.FormattedText="{x:Bind TextToFormat, Mode=OneWay}" FontSize="15" Margin="10" TextWrapping="WrapWholeWords"/> 

The working sample you will find at my Github - 我與你的JSON測試,它看起來/工作相當不錯:

enter image description here

+0

用於JSON的數據不僅僅是一個,而是從鏈接http://..../mobileapp/GetPostByCategoryXMLa?term_id = 372 中選取的。用戶在gridview上選擇項目,然後在該項目上顯示標題,圖像和描述第2頁。 – Rose

+0

@玫瑰我以爲你的問題是關於檢測電子郵件/網站地址。 – Romasz

+0

是的,我的問題是關於檢測電子郵件/網站地址。 Textblock是來自JSON數據的數據綁定,其鏈接爲http://..../mobileapp/GetPostByCategoryXMLa?term_id = 372,JSON數據不僅爲一個。我試圖應用上面的代碼,但沒有檢測到它們。在第一頁上有一個可以由用戶選擇的網格視圖。一旦用戶選擇,將顯示第2頁上的文本塊的描述 – Rose

相關問題