에 내장 된 웹 브라우저를 엽니 다 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를 사용했기 때문입니다.
기본 브라우저를 열고 웹 브라우저 컨트롤을 만들고 WPF 창 (전체를 덮고있는 것)에 배치하고 해당 페이지로 이동한다고 말하고 있습니까? –
그래, 기본 브라우저에서 열길 원하지만 기본 브라우저에서 열고 웹 브라우저 컨트롤을 만들어 전체 창에 배치합니다. – sammarks