示例#1
0
        /// <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();
        }
示例#2
0
		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();
		}
示例#3
0
        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();
        }