2011-09-27 14 views
6

Tengo un cuadro de texto que contiene enlaces. Los contenidos del texto se generan durante el tiempo de ejecución. Mi problema es que no se puede hacer clic en los enlaces dentro del texto. todos los enlaces dentro del bloque de texto se pueden hacer clic, de modo que cuando toco un enlace, se abra el navegador web. En Android, podemos configurarlo usando autolink. ¿Esa opción está disponible en wp7 o en wp7.1 mango?Cómo establecer los enlaces en un bloque de texto que se puede hacer clic en wp7

Respuesta

12

Utilice un HyperLink.

<TextBlock> 
    <Run>Pure Text</Run> 
    <Hyperlink Command="{Binding HyperLinkTapped}">http://google.com</Hyperlink> 
    <Run>Pure Text Again</Run> 
</TextBlock> 

Esto es compatible con Windows Phone 7.1 (Mango).

Puede crear su propio FlowDocument a partir de sus datos, en tiempo de ejecución, si es necesario.

Ejemplo sobre cómo generar un FlowDocument de una cadena:

private void OnMessageReceived(string message) 
{ 
    var textBlock = new RichTextBox() 
    { 
     TextWrapping = TextWrapping.Wrap, 
     IsReadOnly = true, 
    }; 

    var paragraph = new Paragraph(); 

    var runs = new List<Inline>(); 

    foreach (var word in message.Split(' ')) 
    { 
     Uri uri; 

     if (Uri.TryCreate(word, UriKind.Absolute, out uri) || 
      (word.StartsWith("www.") && Uri.TryCreate("http://" + word, UriKind.Absolute, out uri))) 
     { 
      var link = new Hyperlink(); 
      link.Inlines.Add(new Run() { Text = word }); 
      link.Click += (sender, e) => 
      { 
       var hyperLink = (sender as Hyperlink); 
       new WebBrowserTask() { Uri = uri }.Show(); 
      }; 

      runs.Add(link); 
     } 
     else 
     { 
      runs.Add(new Run() { Text = word }); 
     } 

     runs.Add(new Run() { Text = " "}); 
    } 

    foreach (var run in runs) 
     paragraph.Inlines.Add(run); 

    textBlock.Blocks.Add(paragraph); 

    MessagesListBox.Children.Add(textBlock); 
    MessagesListBox.UpdateLayout(); 
} 
+0

Actualizado con un ejemplo completo. –

+6

Estoy usando 7.1, y este xaml ni siquiera compila para mí. – Nathan

+1

Primero, debe ser 'Hipervínculo',' l' es minúscula. En segundo lugar, no puedo obtener el código xaml para compilar en un proyecto 7.1 ... –

2

No hay una función incorporada para hacer esto.

Si su texto (incluidos los enlaces) es HTML, puede visualizarlo en un control WebBrowser.
Si no es así, tendrá que analizar el texto y crear los enlaces usted mismo. (Una combinación de TextBlocks y HyperlinkButtons dentro de un WrapPanel es probablemente el camino a seguir para esto.)

+0

No hay motivo para usar HyperlinkButton ;-) –

2

En contol RichTextBox Silverlight puede ayudar.

<RichTextBox> 
    <Paragraph> 
     <Run Text="This have to navigate me to Google: "/> 
     <Hyperlink NavigateUri="http://google.com" TargetName="_blank">google.com</Hyperlink> 
    </Paragraph> 
</RichTextBox> 
+0

Perfecto - ¡Gracias! –

Cuestiones relacionadas