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。
你说,你想让它打开默认浏览器,并正在创建和放置的地方您的WPF窗口上的Web浏览器控件(覆盖整个事情?),并导航到该页面? – 2011-02-13 09:15:29
是的,我希望它在默认浏览器中打开,但它同时具有这两种功能 - 在默认浏览器中打开并创建Web浏览器控件并将其放置在整个窗口中。 – sammarks 2011-02-13 16:31:51