public void TogglePopup(ImageRun imgRun) { if (imgRun == null || _imageSets.Count == 0) { return; } var imgSet = (from imgset in _imageSets where imgset.Key.FirstOrDefault(item => item.Image == imgRun.Image) != null select imgset).FirstOrDefault(); if (imgSet.Key == null) { return; } if (imgSet.Value) { _popup.IsOpen = false; _imageSets[imgSet.Key] = false; } else { var selected = imgSet.Key.FirstOrDefault(img => img.Image == imgRun.Image); _imageViewer.SetDatasource(imgSet.Key, selected); _imageSets[imgSet.Key] = true; _popup.IsOpen = true; } }
public void SetDatasource(IList <ImageRun> images, ImageRun selected) { this.FlipView.ItemsSource = images; if (selected != null) { _firstImageRun = selected; this.FlipView.SelectedItem = selected; } }
private IEnumerable <RunBase> GetInlines(HtmlNode node) { try { var collection = new List <RunBase>(); #region 遍历子节点 if (node.Name == "#text" || node.Name == "span") { #region #text if (node.ParentNode.Name == "a") { var isRelative = false; try { var uri = new Uri(node.ParentNode.Attributes["href"].Value, UriKind.Absolute); isRelative = false; } catch (Exception) { isRelative = true; } collection.Add(new TextHrefRun() { Text = node.InnerText, Href = node.ParentNode.Attributes["href"].Value, IsRelative = isRelative, }); } else { switch (node.ParentNode.Name) { case "b": case "u": case "strong": collection.Add(new TextRun() { Text = node.InnerText, Type = TextType.Bold }); break; case "h2": collection.Add(new TextRun() { Text = node.InnerText, Type = TextType.H2 }); break; case "p": case "ol": default: collection.Add(new TextRun() { Text = node.InnerText, Type = TextType.Plain }); break; } } #endregion } else if (node.Name == "br") { #region br collection.Add(new LineBreakRun()); #endregion } else if (node.Name == "a") { #region a if (node.ChildNodes.Count > 0) { foreach (var child in node.ChildNodes) { foreach (var inline in GetInlines(child)) { collection.Add(inline); } } } #endregion } else if (node.Name == "b" || node.Name == "u" || node.Name == "strong") { #region b foreach (var grandChild in node.ChildNodes) { collection.AddRange(GetInlines(grandChild)); } #endregion } else if (node.Name == "ul") { #region ul li foreach (var grandChild in node.ChildNodes) { collection.AddRange(GetInlines(grandChild)); } collection.Add(new LineBreakRun()); #endregion } else if (node.Name == "li") { #region ul li collection.Add(new TextRun() { Text = " • " }); foreach (var grandChild in node.ChildNodes) { collection.AddRange(GetInlines(grandChild)); } if (false == collection.LastOrDefault() is LineBreakRun) { collection.Add(new LineBreakRun()); } #endregion } else if (node.Name == "img") { #region img if (node.ParentNode.Name == "a") { var imageHrefRun = new ImageHrefRun() { Image = node.InnerText, Href = node.ParentNode.Attributes["href"].Value }; if (true == node.Attributes.Hashitems.ContainsKey("width")) { imageHrefRun.Width = Double.Parse(node.Attributes["width"].Value); } collection.Add(imageHrefRun); if (imageHrefRun.Width > 0) { collection.Add(new LineBreakRun()); } } else { var imageRun = new ImageRun() { Image = node.Attributes["src"].Value, }; if (true == node.Attributes.Hashitems.ContainsKey("data-rawwidth")) { imageRun.Width = Double.Parse(node.Attributes["data-rawwidth"].Value); } if (true == node.Attributes.Hashitems.ContainsKey("data-rawheight")) { imageRun.Height = Double.Parse(node.Attributes["data-rawheight"].Value); } collection.Add(imageRun); if (imageRun.Width > 0) { collection.Add(new LineBreakRun()); } } #endregion } else { foreach (var childNode in node.ChildNodes) { collection.AddRange(GetInlines(childNode)); } } #endregion return(collection); } catch (Exception) { throw; } }
public IList <ParagraphModel> GetParagraphs(HtmlNodeCollection nodeCollection, Boolean topEndHolder = false) { var paragraphs = new List <ParagraphModel>(); //var header = new ParagraphModel(); //header.Runs.Add(new LineBreakRun()); //paragraphs.Add(header); try { var paragraph = new ParagraphModel(); foreach (var node in nodeCollection) { if (node.Name == "#text") { #region #text var run = new TextRun() { Text = node.InnerText, Type = TextType.Plain }; paragraph.Runs.Add(run); #endregion } else if (node.Name == "div" && node.Attributes.Hashitems.ContainsKey("class") && node.Attributes["class"].Value == "video-box") { #region video-box-inner var videoRun = GetVideobox(node); if (videoRun != null) { paragraph = MergePhagraph(paragraphs, paragraph); var para = new ParagraphModel(); para.Runs.Add(videoRun); paragraphs.Add(para); } #endregion } else if (node.Name == "br") { #region br paragraph.Runs.Add(new LineBreakRun()); #endregion } else if (node.Name == "b") { #region b foreach (var child in node.ChildNodes) { foreach (var inline in GetInlines(child)) { paragraph.Runs.Add(inline); } } #endregion } else if (node.Name == "a") { #region a foreach (var child in node.ChildNodes) { foreach (var inline in GetInlines(child)) { paragraph.Runs.Add(inline); } } #endregion } else if (node.Name == "h2" || node.Name == "p" || node.Name == "ol") { #region h2 p ol paragraph = MergePhagraph(paragraphs, paragraph); var para = new ParagraphModel(); foreach (var child in node.ChildNodes) { foreach (var inline in GetInlines(child)) { para.Runs.Add(inline); } } paragraphs.Add(para); #endregion } else if (node.Name == "img") { #region img var imageRun = new ImageRun() { Image = node.Attributes["src"].Value }; if (true == node.Attributes.Hashitems.ContainsKey("data-rawwidth")) { imageRun.Width = Double.Parse(node.Attributes["data-rawwidth"].Value); } if (true == node.Attributes.Hashitems.ContainsKey("data-rawheight")) { imageRun.Height = Double.Parse(node.Attributes["data-rawheight"].Value); } if (imageRun.Width > 0) { paragraph = MergePhagraph(paragraphs, paragraph); var para = new ParagraphModel(); para.Runs.Add(imageRun); para.Runs.Add(new LineBreakRun()); paragraphs.Add(para); } else { paragraph.Runs.Add(imageRun); } #endregion } else if (node.ChildNodes.Count > 0) { #region Inner paragraph = MergePhagraph(paragraphs, paragraph); var para = new ParagraphModel(); foreach (var grandChildNode in node.ChildNodes) { var inlines = GetInlines(grandChildNode); foreach (var inlineItem in inlines) { paragraph.Runs.Add(inlineItem); } } paragraphs.Add(para); #endregion } } paragraphs.Add(paragraph); } catch (Exception ex) { UmengAnalytics.TrackException(ex, ex.Message); } return(paragraphs); }