示例#1
0
 public abstract DependencyObject Visit(Documentation.List list);
        public override DependencyObject Visit(Documentation.List list)
        {
            if (list.Type == ListType.Table)
            {
                var result = new Table();
                result.Columns.Add(new TableColumn()
                {
                    Width = new GridLength(1, GridUnitType.Star)
                });
                result.Columns.Add(new TableColumn()
                {
                    Width = new GridLength(3, GridUnitType.Star)
                });
                result.RowGroups.Add(new TableRowGroup());
                var header = new TableRow();

                var termHeader = new TableCell();
                if (list.Header?.Term.Count > 0)
                {
                    termHeader.Blocks.AddRange(GetBlocks(list.Header?.Term.Select(e => e.Visit(this))));
                }
                else
                {
                    termHeader.Blocks.Add(new System.Windows.Documents.Paragraph(new Run("Term")
                    {
                        FontWeight = FontWeight.FromOpenTypeWeight(700)
                    }));
                }
                header.Cells.Add(termHeader);

                var descripHeader = new TableCell();
                if (list.Header?.Description.Count > 0)
                {
                    descripHeader.Blocks.AddRange(GetBlocks(list.Header?.Description.Select(e => e.Visit(this))));
                }
                else
                {
                    descripHeader.Blocks.Add(new System.Windows.Documents.Paragraph(new Run("Description")
                    {
                        FontWeight = FontWeight.FromOpenTypeWeight(700)
                    }));
                }
                header.Cells.Add(descripHeader);
                result.RowGroups[0].Rows.Add(header);

                foreach (var item in list.Children)
                {
                    var row = new TableRow();
                    row.Cells.Add(new TableCell());
                    row.Cells.Add(new TableCell());
                    if (item.Term.Count > 0)
                    {
                        row.Cells[0].Blocks.AddRange(GetBlocks(item.Term.Select(e => e.Visit(this))));
                    }
                    if (item.Description.Count > 0)
                    {
                        row.Cells[1].Blocks.AddRange(GetBlocks(item.Description.Select(e => e.Visit(this))));
                    }
                    result.RowGroups[0].Rows.Add(row);
                }
                return(result);
            }
            else
            {
                var result = new System.Windows.Documents.List
                {
                    MarkerStyle = list.Type == ListType.Number ? TextMarkerStyle.Decimal : TextMarkerStyle.Disc
                };
                if (_listLevel > 0)
                {
                    result.Margin = new Thickness(0);
                }
                try
                {
                    _listLevel++;
                    result.ListItems.AddRange(list.Children.Select(i =>
                    {
                        var item = new System.Windows.Documents.ListItem();
                        item.Blocks.AddRange(GetBlocks(i.Description.Select(e => e.Visit(this))));
                        return(item);
                    }));
                    return(result);
                }
                finally
                {
                    _listLevel--;
                }
            }
        }
        public override DependencyObject Visit(Documentation.List list)
        {
            var grid = new Grid
            {
                Margin = new Thickness(0, 9, 0, 9),
            };

            grid.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });
            var offset   = (list.Type == Documentation.ListType.Table ? 1 : 0);
            var rowCount = list.Children.Count + offset;

            for (var i = 0; i < rowCount; i++)
            {
                grid.RowDefinitions.Add(new RowDefinition());
            }

            if (list.Type == Documentation.ListType.Table)
            {
                var termHeader = default(UIElement);
                if (list.Header?.Term.Count > 0)
                {
                    termHeader = GetBlock(list.Header?.Term.Select(e => e.Visit(this)));
                }
                else
                {
                    termHeader = new TextBlock(new Run("Term"))
                    {
                        TextWrapping = TextWrapping.Wrap, FontWeight = FontWeight.FromOpenTypeWeight(700)
                    }
                };
                termHeader = WithMargin(termHeader);
                Grid.SetRow(termHeader, 0);
                Grid.SetColumn(termHeader, 0);
                grid.Children.Add(termHeader);

                var descripHeader = default(UIElement);
                if (list.Header?.Description.Count > 0)
                {
                    descripHeader = GetBlock(list.Header?.Description.Select(e => e.Visit(this)));
                }
                else
                {
                    descripHeader = new TextBlock(new Run("Description"))
                    {
                        TextWrapping = TextWrapping.Wrap, FontWeight = FontWeight.FromOpenTypeWeight(700)
                    }
                };
                descripHeader = WithMargin(descripHeader);
                Grid.SetRow(descripHeader, 0);
                Grid.SetColumn(descripHeader, 1);
                grid.Children.Add(descripHeader);
            }

            for (var i = 0; i < list.Children.Count; i++)
            {
                var term = default(UIElement);
                switch (list.Type)
                {
                case Documentation.ListType.Number:
                    term = new TextBlock(new Run($"{i + 1}."));
                    break;

                case Documentation.ListType.Table:
                    term = GetBlock(list.Children[i].Term.Select(e => e.Visit(this)));
                    break;

                default:
                    term = new TextBlock(new Run($"●"));
                    break;
                }
                term = WithMargin(term);
                Grid.SetRow(term, offset + i);
                Grid.SetColumn(term, 0);
                grid.Children.Add(term);

                var description = GetBlock(list.Children[i].Description.Select(e => e.Visit(this)));
                description = WithMargin(description);
                Grid.SetRow(description, offset + i);
                Grid.SetColumn(description, 1);
                grid.Children.Add(description);
            }
            return(grid);
        }