2011-09-27 27 views
6

我有一個文本框包含鏈接。文本中的內容是在運行時生成的。我的問題是文本內的鏈接不可點擊,如何才能使文本塊內的所有鏈接都是可點擊的,所以當我點擊一個鏈接時,它應該打開網頁瀏覽器。在android中,我們可以使用autolink來設置它。這樣的選項是可用的wp7或wp7.1芒果?如何設置在wp7中可點擊的文本塊中的鏈接

回答

12

使用HyperLink

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

這是從Windows Phone 7.1(芒果)支持。

如有必要,您可以在運行時根據您的數據創建自己的FlowDocument。如何從一個字符串產生的FlowDocument

例子:

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

更新了一個完整的例子。 –

+6

我正在使用7.1,這個xaml甚至沒有爲我編譯。 – Nathan

+1

首先,它應該是'超鏈接','l'是小寫。其次,我無法獲得在7.1項目中編譯的xaml代碼... –

2

沒有內置的功能來做到這一點。

如果您的文本(包括鏈接)是HTML,則可以將其顯示在WebBrowser控件中。
如果沒有,您需要解析文本並自行構建鏈接。 (WrapPanel內的TextBlocks和HyperlinkBut​​tons的組合可能是這樣做的方式。)

+0

沒有理由再使用HyperlinkBut​​ton ;-) –

2

在Silverlight中的RichTextBox控逆變可以幫助你。

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

完美 - 謝謝! –

相關問題