/// <summary>Creates the UI elements for the given HTML node and HTML view.</summary> /// <param name="node">The HTML node.</param> /// <param name="htmlView">The HTML view.</param> /// <returns>The UI elements.</returns> public DependencyObject[] CreateControls(HtmlNode node, IHtmlView htmlView) { var controls = new List<Grid>(); foreach (var child in node.Children.OfType<HtmlTagNode>().Where(c => c.Name == "li")) { var grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(20)}); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); var textBlock = CreateBulletSymbol(htmlView); grid.Children.Add(textBlock); Grid.SetColumn(textBlock, 0); var panel = new StackPanel(); child.WrapWithHtmlTag(); foreach (var c in child.GetChildControls(htmlView).OfType<UIElement>()) { var frameworkElement = c as FrameworkElement; if (frameworkElement != null) frameworkElement.HorizontalAlignment = HorizontalAlignment.Stretch; panel.Children.Add(c); } grid.Children.Add(panel); Grid.SetColumn(panel, 1); controls.Add(grid); } AdjustMargins(htmlView, controls); return controls.OfType<DependencyObject>().ToArray(); }
public DependencyObject[] Generate(HtmlNode node, IHtmlTextBlock textBlock) { var list = new List<Grid>(); foreach (var child in node.Children.Where(c => c.Value == "li")) { var grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); var tb = new TextBlock(); tb.Foreground = textBlock.Foreground; tb.FontSize = textBlock.FontSize; tb.FontFamily = textBlock.FontFamily; tb.Margin = new Thickness(); tb.Text = "• "; grid.Children.Add(tb); Grid.SetColumn(tb, 0); var panel = new StackPanel(); child.ToHtmlBlock(); foreach (var c in child.GetLeaves(textBlock).OfType<UIElement>()) { var frameworkElement = c as FrameworkElement; if (frameworkElement != null) frameworkElement.HorizontalAlignment = HorizontalAlignment.Stretch; panel.Children.Add(c); } grid.Children.Add(panel); Grid.SetColumn(panel, 1); list.Add(grid); } var first = list.FirstOrDefault(); if (first != null) first.Margin = new Thickness(0, textBlock.ParagraphMargin, 0, 0); var last = list.LastOrDefault(); if (last != null) last.Margin = new Thickness(0, 0, 0, textBlock.ParagraphMargin); return list.OfType<DependencyObject>().ToArray(); }
internal void RefreshContents() { if (!_allowRefreshContents) return; var contentsFoundUnderMe = new LogicalTreeAdapter(this).Descendants<DependencyObject>().Where(d => d.Item is ManagedContent).Select(d => d.Item).Cast<ManagedContent>(); var contentsFoundInFloatingMode = _floatingWindows.SelectMany(d => d.HostedPane.Items.Cast<ManagedContent>()); DockableContent contentFoundInFlyoutMode = null; if (_flyoutWindow != null && _flyoutWindow.ReferencedPane != null && _flyoutWindow.ReferencedPane.Items.Count > 0) { contentFoundInFlyoutMode = _flyoutWindow.ReferencedPane.Items[0] as DockableContent; } var contentsFound = new List<ManagedContent>(); contentsFound.AddRange(contentsFoundUnderMe); contentsFound.AddRange(contentsFoundInFloatingMode); if (contentFoundInFlyoutMode != null) contentsFound.Add(contentFoundInFlyoutMode); var dockableContensToRemove = DockableContents.Except(contentsFound.OfType<DockableContent>()); var dockableContensToAdd = contentsFound.OfType<DockableContent>().Except(DockableContents); dockableContensToAdd.ToArray().ForEach(d => { if (d.State != DockableContentState.Hidden) DockableContents.Add(d); }); dockableContensToRemove.ToArray().ForEach(d => { if (d.State != DockableContentState.Hidden) DockableContents.Remove(d); }); var documentsToRemove = Documents.Except(contentsFound.OfType<DocumentContent>()); var documentsToAdd = contentsFound.OfType<DocumentContent>().Except(Documents); documentsToAdd.ToArray().ForEach(d => Documents.Add(d)); documentsToRemove.ToArray().ForEach(d => Documents.Remove(d)); //refresh MainDocumentPane if (MainDocumentPane == null || MainDocumentPane.GetManager() != this) { ILinqToTree<DependencyObject> itemFound = new LogicalTreeAdapter(this).Descendants<DependencyObject>().FirstOrDefault(d => d.Item is DocumentPane); MainDocumentPane = itemFound != null ? itemFound.Item as DocumentPane : null; } //_floatingWindows.ForEach(fl => fl.CheckContents()); CheckValidPanesFromTabGroups(); }