2011-02-13 7 views
1

에 내장 된 웹 브라우저를 엽니 다 I WPF 라이브러리에 대해 다음 HtmlTextBlock 내 프로그램에 포함이 있습니다WPF 하이퍼 링크 프로그램

private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e) 
    { 
     this.tweeter.Content = twt.User.Username; 
    //AddHandler(Hyperlink.ClickEvent, (RoutedEventHandler)Hyperlink_Click); 
    ImageSourceConverter conv = new ImageSourceConverter(); 
    this.tweetImage.Source = (ImageSource)conv.ConvertFromString(twt.User.AvatarURL); 
    string txt = twt.Text; 
    Regex regx = new Regex("(http|ftp|https)://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); 
    MatchCollection matches = regx.Matches(txt); 
    foreach (Match m in matches) 
    { 
     int strt = txt.IndexOf(m.Value); 
     int end = strt + m.Value.Length; 
     if (strt != -1) 
     { 
      txt = txt.Insert(end, "[/a]"); 
      txt = txt.Insert(strt, "[a href=" + m.Value + "]"); 
     } 
    } 

    this.tweetText.Html = txt; 
    string source = "web"; 
    if (twt.SourceName != null) 
     source = twt.SourceName; 
    string dateString = twt.DatePosted; 
    const string format = "ddd MMM dd HH:mm:ss zzzz yyyy"; 
    DateTime my_date = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture); 
    TimeSpan ts = new TimeSpan(); 
    ts = DateTime.Now - my_date; 
    string date = "date"; 

    // Date Parsing 
    if (ts.Days > 0) 
    { 
     string month = "Mo"; 
     switch (my_date.Month) 
     { 
      case 1: 
       month = "Jan"; 
       break; 
      case 2: 
       month = "Feb"; 
       break; 
      case 3: 
       month = "Mar"; 
       break; 
      case 4: 
       month = "Apr"; 
       break; 
      case 5: 
       month = "May"; 
       break; 
      case 6: 
       month = "June"; 
       break; 
      case 7: 
       month = "July"; 
       break; 
      case 8: 
       month = "Aug"; 
       break; 
      case 9: 
       month = "Sep"; 
       break; 
      case 10: 
       month = "Oct"; 
       break; 
      case 11: 
       month = "Nov"; 
       break; 
      case 12: 
       month = "Dec"; 
       break; 
     } 
     date = String.Format("on {0}, {1} {2}, {3}", my_date.DayOfWeek.ToString(), month, my_date.Day, my_date.Year); 
    } 
    else if (ts.Hours > 0) 
     if (ts.Hours == 1) 
      date = "1 hour ago"; 
     else 
      date = string.Format("{0} hours ago", ts.Hours); 
    else if (ts.Minutes > 0) 
     if (ts.Minutes == 1) 
      date = "1 minute ago"; 
     else 
      date = string.Format("{0} minutes ago", ts.Minutes); 
    else if (ts.Seconds > 30) 
     date = string.Format("{0} seconds ago", ts.Seconds); 
    else 
     date = "just now"; 

    this.sourceLabel.Content = String.Format("posted {0} from {1}", date, source); 

    //tweetText.ContextMenu.StaysOpen = false; 
    } 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Clipboard.SetText(tweetText.Text); 
} 

private void Hyperlink_Click(object sender, RoutedEventArgs e) 
{ 
    if (e.OriginalSource is Hyperlink) 
    { 
     Process.Start((e.OriginalSource as Hyperlink).NavigateUri.ToString()); 
     e.Handled = true; 
    } 
} 
: http://www.codeproject.com/KB/WPF/htmltextblock.aspx

지금, 나는 HtmlTextBlock을 구현하기로했다 다음 코드를 가지고

여기서 문제는 하이퍼 링크 중 하나를 클릭하면 코드에 표시된 EventHandler에 의해 결정된대로 프로그램이 기본 브라우저에서 링크를 연다는 것입니다. 그러나 프로그램 자체에 포함 된 WebBrowser 컨트롤도 열립니다.

나는 소스 코드를 통해 사냥을 해봤지만 'WebBrowser'라는 단어 또는 그와 비슷한 단어는 발견되지 않았다. 따라서 라이브러리가 아닌 것으로 간주한다.

WPF 문제 일 수 있습니까? 내가 뭔가 잘못하고 있는거야? 꽤 짜증나고 있습니다.

편집 : 문제가 해결되었습니다. 그것은 RequestNavigateEvent 대신 ClickEvent를 사용했기 때문입니다.

+0

기본 브라우저를 열고 웹 브라우저 컨트롤을 만들고 WPF 창 (전체를 덮고있는 것)에 배치하고 해당 페이지로 이동한다고 말하고 있습니까? –

+0

그래, 기본 브라우저에서 열길 원하지만 기본 브라우저에서 열고 웹 브라우저 컨트롤을 만들어 전체 창에 배치합니다. – sammarks

답변

0

즉, 브라우저 개방을 중지해야 제거 기본 브라우저

Process.Start((e.OriginalSource as Hyperlink).NavigateUri.ToString()); 

에 URL을 열어 주실의 다음 행. 웹 브라우저 컨트롤에서 uri를 열려면 source 속성을 설정해야합니다.

+0

나도 알아,하지만 문제는 프로그램 내에 만들어지는 WebBrowser 컨트롤이 있다는 것인데, 나는 그것을 생성하기 위해 무엇인가 코딩하지 않았기 때문에 그것이 왜 만들어지고 있는지 전혀 모른다. – sammarks