static void name_Click(object sender, RoutedEventArgs e) { // The event handler in the main application can handle the click event in a custom // fashion (i.e., show the tweets in Witty or launch a URL, etc). That behavior is // not implemented here. try { if (e.OriginalSource is Hyperlink) { Hyperlink h = e.OriginalSource as Hyperlink; if (h.Parent is TweetTextBlock) { TweetTextBlock p = h.Parent as TweetTextBlock; p.RaiseEvent(new RoutedEventArgs(NameClickEvent, h)); return; } } // As a fallback (i.e., if the event is not handled), we launch the hyperlink's // URL in a web browser System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString()); } catch { //TODO: Log specific URL that caused error MessageBox.Show("There was a problem launching the specified URL.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); } }
static void hashtag_Click(object sender, RoutedEventArgs e) { try { if (e.OriginalSource is Hyperlink) { Hyperlink h = e.OriginalSource as Hyperlink; if (h.Parent is TweetTextBlock) { TweetTextBlock p = h.Parent as TweetTextBlock; p.RaiseEvent(new RoutedEventArgs(HashtagClickEvent, h)); return; } } // As a fallback (i.e., if the event is not handled), we launch the hyperlink's // URL in a web browser System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString()); } catch { //TODO: Log specific URL that caused error MessageBox.Show("There was a problem launching the specified URL.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); } }
public static TweetTextBlock FormatName(TweetTextBlock textblock, string word) { string userName = String.Empty; string firstLetter = word.Substring(0, 1); Match foundUsername = Regex.Match(word, @"@(\w+)(?<suffix>.*)"); if (foundUsername.Success) { userName = foundUsername.Groups[1].Captures[0].Value; Hyperlink name = new Hyperlink(); name.Inlines.Add(userName); name.NavigateUri = new Uri("http://twitter.com/" + userName); name.ToolTip = "View @" + userName + "'s recent tweets"; name.Tag = userName; name.Click += new RoutedEventHandler(name_Click); if (firstLetter != "@") { textblock.Inlines.Add(firstLetter); } textblock.Inlines.Add("@"); textblock.Inlines.Add(name); textblock.Inlines.Add(foundUsername.Groups["suffix"].Captures[0].Value); } return(textblock); }
private static void OnTweetTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { string text = args.NewValue as string; if (!string.IsNullOrEmpty(text)) { TweetTextBlock textblock = (TweetTextBlock)obj; textblock.Inlines.Clear(); textblock.Inlines.Add(" "); string[] words = Regex.Split(text, @"([ \(\)\{\}\[\]])"); string possibleUserName = words[0].ToString(); if ((possibleUserName.Length > 1) && (possibleUserName.Substring(1, 1) == "@")) { textblock = FormatName(textblock, possibleUserName); words.SetValue("", 0); } foreach (string word in words) { // clickable hyperlinks if (UrlShorteningService.IsUrl(word)) { try { Hyperlink link = new Hyperlink(); link.NavigateUri = new Uri(word); link.Inlines.Add(word); link.Click += new RoutedEventHandler(link_Click); link.ToolTip = "Open link in the default browser"; textblock.Inlines.Add(link); } catch { //TODO:What are we catching here? Why? Log it? textblock.Inlines.Add(word); } } // clickable @name else if (word.StartsWith("@")) { textblock = FormatName(textblock, word); } // clickable #hashtag else if (word.StartsWith("#")) { string hashtag = String.Empty; Match foundHashtag = Regex.Match(word, @"#(\w+)(?<suffix>.*)"); if (foundHashtag.Success) { hashtag = foundHashtag.Groups[1].Captures[0].Value; Hyperlink tag = new Hyperlink(); tag.Inlines.Add(hashtag); string hashtagUrl = "http://search.twitter.com/search?q=%23{0}"; // The main application has access to the Settings class, where a // user-defined hashtagUrl can be stored. This hardcoded one that // is used to set the NavigateUri is just a default behavior that // will be used if the click event is not handled for some reason. tag.NavigateUri = new Uri(String.Format(hashtagUrl, hashtag)); tag.ToolTip = "Show statuses that include this hashtag"; tag.Tag = hashtag; tag.Click += new RoutedEventHandler(hashtag_Click); textblock.Inlines.Add("#"); textblock.Inlines.Add(tag); textblock.Inlines.Add(foundHashtag.Groups["suffix"].Captures[0].Value); } } else { textblock.Inlines.Add(word); } } textblock.Inlines.Add(" "); } }
public static TweetTextBlock FormatName(TweetTextBlock textblock, string word) { string userName = String.Empty; string firstLetter = word.Substring(0, 1); Match foundUsername = Regex.Match(word, @"@(\w+)(?<suffix>.*)"); if (foundUsername.Success) { userName = foundUsername.Groups[1].Captures[0].Value; Hyperlink name = new Hyperlink(); name.Inlines.Add(userName); name.NavigateUri = new Uri("http://twitter.com/" + userName); name.ToolTip = "View @" + userName + "'s recent tweets"; name.Tag = userName; name.Click += new RoutedEventHandler(name_Click); if (firstLetter != "@") textblock.Inlines.Add(firstLetter); textblock.Inlines.Add("@"); textblock.Inlines.Add(name); textblock.Inlines.Add(foundUsername.Groups["suffix"].Captures[0].Value); } return textblock; }