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); }