/// <summary> /// Renders a quote element. /// </summary> protected override void RenderQuote(QuoteBlock element, IRenderContext context) { if (!(context is UIElementCollectionRenderContext localContext)) { throw new RenderContextIncorrectException(); } var blockUIElementCollection = localContext.BlockUIElementCollection; var stackPanel = new StackPanel(); var childContext = new UIElementCollectionRenderContext(stackPanel.Children, context) { Parent = stackPanel }; if (QuoteForeground != null && !localContext.OverrideForeground) { childContext.Foreground = QuoteForeground; } RenderBlocks(element.Blocks, childContext); var border = new Border { Margin = QuoteMargin, Background = QuoteBackground, BorderBrush = childContext.OverrideForeground ? childContext.Foreground : QuoteBorderBrush ?? childContext.Foreground, BorderThickness = QuoteBorderThickness, Padding = QuotePadding, Child = stackPanel }; blockUIElementCollection.Add(border); }
/// <summary> /// Renders a list element. /// </summary> protected override void RenderListElement(ListBlock element, IRenderContext context) { if (!(context is UIElementCollectionRenderContext localContext)) { throw new RenderContextIncorrectException(); } var blockUIElementCollection = localContext.BlockUIElementCollection; // Create a grid with two columns. Grid grid = new Grid { Margin = ListMargin }; // The first column for the bullet (or number) and the second for the text. grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(ListGutterWidth) }); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); for (int rowIndex = 0; rowIndex < element.Items.Count; rowIndex++) { var listItem = element.Items[rowIndex]; // Add a row definition. grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // Add the bullet or number. var bullet = CreateTextBlock(localContext); bullet.Margin = ParagraphMargin; switch (element.Style) { case ListStyle.Bulleted: bullet.Text = "•"; break; case ListStyle.Numbered: bullet.Text = $"{rowIndex + 1}."; break; } bullet.HorizontalAlignment = HorizontalAlignment.Right; bullet.Margin = new Thickness(0, 0, ListBulletSpacing, 0); Grid.SetRow(bullet, rowIndex); grid.Children.Add(bullet); // Add the list item content. var content = new StackPanel(); var childContext = new UIElementCollectionRenderContext(content.Children, localContext); RenderBlocks(listItem.Blocks, childContext); Grid.SetColumn(content, 1); Grid.SetRow(content, rowIndex); grid.Children.Add(content); } blockUIElementCollection.Add(grid); }