private void SetImgText(string htmlFragment) { if (htmlFragment == null || htmlFragment.Length == 0) { return; } Paragraph paragraph; if (this.Blocks.Count == 0 || (paragraph = this.Blocks[this.Blocks.Count - 1] as Paragraph) == null) { paragraph = new Paragraph(); this.Blocks.Add(paragraph); } var nextOffset = 0; var regEx = new Regex(@"(\[img=(?<imgname>.*?)\](?<imgtxt>.*?)\[/img\])", RegexOptions.IgnoreCase | RegexOptions.Singleline); foreach (Match match in regEx.Matches(htmlFragment)) { if (match.Index == nextOffset) { nextOffset = match.Index + match.Length; var run = new Run { Text = "[此处有图片]", Foreground = new SolidColorBrush(Color.FromArgb(255, 150, 230, 230)) }; var link = new Hyperlink { }; link.Click += new RoutedEventHandler((sender, e) => { Navi.NavigationTo("/ImageView.xaml?url=" + HttpUtility.UrlEncode(match.Groups["imgtxt"].Value)); }); link.Inlines.Add(run); paragraph.Inlines.Add(link); } else if (match.Index > nextOffset) { this.SetImgText(htmlFragment.Substring(nextOffset, match.Index - nextOffset)); nextOffset = match.Index + match.Length; var run = new Run { Text = "[此处有图片]", Foreground = new SolidColorBrush(Color.FromArgb(255, 150, 230, 230)) }; var link = new Hyperlink { }; link.Click += new RoutedEventHandler((sender, e) => { Navi.NavigationTo("/ImageView.xaml?url=" + HttpUtility.UrlEncode(match.Groups["imgtxt"].Value)); }); link.Inlines.Add(run); paragraph.Inlines.Add(link); } } if (nextOffset < htmlFragment.Length) { paragraph.Inlines.Add(new Run { Text = HtmlHelp.NoTag(htmlFragment.Substring(nextOffset)) }); } }