2011-02-13 141 views
1

内的web浏览器我有一个WPF库以下HtmlTextBlock列入我的计划之内:http://www.codeproject.com/KB/WPF/htmltextblock.aspxWPF打开超链接的嵌入式程序

现在,我已经得到了是应该执行HtmlTextBlock下面的代码:

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

这里的问题是,当单击其中一个超链接时,程序在默认浏览器中打开链接,如代码中显示的EventHandlers所确定的。但是,它也会打开嵌入程序本身的WebBrowser控件。

我已经搜遍了源代码,并且我没有发现任何包含单词“WebBrowser”或类似的东西,所以我认为它不是库。

难道这是一个WPF问题吗?难道我做错了什么?它变得非常令人沮丧。

编辑:刚解决了这个问题。这是因为我使用ClickEvent而不是RequestNavigateEvent。

+0

你说,你想让它打开默认浏览器,并正在创建和放置的地方您的WPF窗口上的Web浏览器控件(覆盖整个事情?),并导航到该页面? – 2011-02-13 09:15:29

+0

是的,我希望它在默认浏览器中打开,但它同时具有这两种功能 - 在默认浏览器中打开并创建Web浏览器控件并将其放置在整个窗口中。 – sammarks 2011-02-13 16:31:51

回答

0

在默认浏览器

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

将打开URL删除应该停止浏览器中打开下面的一行。要在Web浏览器控件中打开uri,您需要设置源属性。

webBrowser.Source = (e.OriginalSource as Hyperlink).NavigateUri.ToString();