2011-09-27 3 views
6

텍스트 상자에 링크가 포함되어 있습니다. 텍스트의 내용이 런타임에 생성됩니다. 내 문제는 텍스트 내부의 링크를 클릭 할 수 없다는 것입니다. 어떻게 할 수 있습니까? 텍스트 블록 안의 모든 링크를 클릭 할 수 있도록 링크를 탭하면 웹 브라우저를 열어야합니다. 안드로이드에서는 autolink를 사용하여 설정할 수 있습니다. 그런 옵션은 wp7 또는 wp7.1 mango에서 사용할 수 있습니까?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를 생성하는 방법에

예 : 실버를 RichTextBox contol에서

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 인 경우 웹 브라우저 컨트롤에 표시 할 수 있습니다.
그렇지 않으면 텍스트를 파싱하고 직접 링크를 만들어야합니다. WrapPanel 내의 TextBlock과 HyperlinkButton을 조합하면이 방법을 사용할 수 있습니다.

+0

하이퍼 링크 버튼을 더 이상 사용하지 않아도됩니다. –

2

가 당신을 도울 수 있습니다.

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

Perfect - Thanks! –

관련 문제