I have an answer to my own question, which is in a slightly different direction than I used to be. In WPF, you can draw a control on any surface, so I create a “FlowDocument” object and add “Paragraphs” containing meshes, images, and everything I need to display. I will save another answer, marked as accepted, but I decided that I would add this if someone is interested in the direction in which I ended up.
FlowDocument flowDoc = new FlowDocument();
Paragraph header = new Paragraph();
Grid imageGrid = new Grid();
imageGrid.ColumnDefinitions.Add(new ColumnDefinition());
ColumnDefinition colDef = new ColumnDefinition();
colDef.Width = new GridLength(4, GridUnitType.Star);
imageGrid.ColumnDefinitions.Add(colDef);
imageGrid.ColumnDefinitions.Add(new ColumnDefinition());
BitmapImage bitImage = new BitmapImage(new Uri("{...}", UriKind.RelativeOrAbsolute));
Image image = new Image();
image.Source = bitImage;
image.Margin = new Thickness(10.0d);
Grid.SetColumn(image, 1);
imageGrid.Children.Add(image);
header.Inlines.Add(imageGrid);
header.Inlines.Add(new LineBreak());
header.Inlines.Add("Some text here");
header.Inlines.Add(new LineBreak());
flowDoc.Blocks.Add(header);
, FlowDocument, , .