2012-03-09 2 views
1

나는 기본적인 익명 트위터 앱을 개발하려고 노력하고있다. 문제는 내가 콘텐츠를 클릭 할 수 있기를 원한다는 것이다. 트위터가 게시 한 이미지 등. 가능하다면 프로필 사진을 확장 할 수 있기를 바랍니다.트위터 응용 프로그램에서 텍스트의 링크를 클릭 할 수있는 방법은 무엇입니까?

+0

우리는 내가이 가이드를 따라 ... –

+0

더 구체적으로하시기 바랍니다 당신이 이미 가지고있는 것에 대해 좀 더 정보가 필요 해요 http://weblogs.asp.net/scottgu/archive/2010/03/18 /building-a-windows-phone-7-twitter-application-using-silverlight.aspx 원하는 사용자의 트윗을 표시하는 기본 앱을 만들 수 있습니다. 검색된 트윗 목록 상자에서 때때로 twittpic 등 예에 대한 링크를해야합니다 .. 내가 사진을 볼 수 twittpic 링크를 클릭하고 또한 그것을 확대하기 위해 사용자의 프로필 사진을 클릭 할 수 있도록하고 싶습니다. 감사 –

답변

0

텍스트에 링크가 있으면 런타임에 수신 된 데이터를 조작해야합니다. 더 이상 순수 텍스트로 텍스트 블록을 채우지 않지만 링크를 실제로 하이퍼 링크로 변경하십시오.

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(); 
} 

위의 코드의 단점은 당신이 데이터 바인딩을 잃고 있다는 것입니다 : This answer 자세히 것으로 처리합니다. 새 텍스트를 추가하는 대신 기존 텍스트 블록을 변경하는 방식으로 함수를 변경하려고 할 수 있습니다. 나중에 링크를 만들지 않고 자신의 응용 프로그램에서 트윗을 계속 사용하려면 데이터 컨텍스트 만 유지하십시오.

동적으로 XAML을 조작하는 데 익숙해졌습니다.

업데이트 : 사실, 나는 그것을 지원하는 요소 중 Content을 UIElement에 바인딩 할 수 있다는 것을 발견했습니다. 당신은 예를 들어 쓸모없는 용기 <StackPanel Content="{Binding MyRichText}"></StackPanel>에 텍스트 상자 라인을 변경하고 ... 당신의 TwitterItemMyRichText 속성에 위의 코드에서 textBlock를 할당 할 수 있도록


이미지가 당신이 HyperlinkButton이 필요합니다 클릭 할 수 있도록하려면 . 당신은 단순히 이미지 개체를 둘러싸고 수 있다는 것을 의미한다

<HyperlinkButton> 
    singleObject 
</HyperlinkButton> 

: 그냥 템플릿을 변경합니다.

HyperlinkButton에는 NavigateURI 속성이 있으므로 URL (또는 작성자의 프로필 페이지 등)의 이미지에 간단하게 바인딩 할 수 있습니다.

<HyperlinkButton NavigateURI="{Binding ImageSource}"> 
    <Image Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/> 
</HyperlinkButton> 

그런 것. 대신 프로필 URL을 원하는 경우 예를 들어, NavigateURI="{Binding ImageSource}NavigateURI="{Binding ProfileURL}"에를 변경해야합니다 그리고 당신은 당신이 새로운 트위터 항목을 만들 URL에 TwitterItem에 ProfileURL를 추가하고 설정합니다.

그래서,이 더 간단한 변경입니다.

관련 문제