tag online metas maker hacer generar generador etiquetas create como c# json uwp textblock

c# - online - metatag maker



Detectar es la dirección de un sitio web o la dirección de correo electrónico en el bloque de texto (1)

Tengo un TextBlock cuyos datos provienen de JSON. Quisiera si el bloque de texto la dirección del sitio web o el correo electrónico, el color del texto se vuelve azul y el usuario puede hacer clic (si la dirección de correo electrónico va a la aplicación de correo electrónico y el usuario puede escribir un correo electrónico directamente a esta dirección). dirección del sitio web, se abrirá de inmediato el navegador web). XAML:

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

Ejemplo de datos JSON de http: //.../mobileapp/GetPostByCategoryXMLa? Term_id = 378 :

¿Cómo lo aplico?


He modificado un poco la respuesta desde aquí y ahora procesa la cadena encuadernada, buscando direcciones de sitios web y correos electrónicos. Una vez que encuentra uno, crea un hipervínculo que debe activar la aplicación de correo electrónico o navegador web.

El código para la extensión 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]+@[/S]+)", RegexOptions.IgnoreCase); Regex isWWW = new Regex(@"(http[s]?://[/S]+|www.[/S]+)"); Regex isEmail = new Regex(@"[/S]+@[/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 }); } } })); }

Y el código en xaml:

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

La muestra de trabajo que encontrarás en mi Github : la he probado con tu json y parece / funciona bastante bien: