Как установить встроенные изображения вертикально по центру в RichTextBox
Я работаю над WPF, я отображаю данные RichText в RichTextBox для этого взял WindowsFormHost, внутри которого я беру WinForm RichTextBox для отображения RichTextData, которые имеют изображения + текст.
Но хотя отображается, что изображения RichTextData выровнены по верху, а текст выровнены по низу, см. На изображении ниже красный кружок - RichTextImage
Я хочу отображать изображения и текст в центре. Как и на изображении ниже, красный круг - это RichTextImage, который располагается в центре с текстом.
Мой код XAML:
<Window x:Class="WPFRichTextBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Title="MainWindow" Height="600" Width="800" Background="LightBlue" xmlns:my="clr-namespace:WPFRichTextBox">
<Grid Loaded="Grid_Loaded">
<WindowsFormsHost Margin="0,424,0,22">
<wf:RichTextBox Text="RichTextBox" x:Name="richTbTest1" BorderStyle="None" Enabled="True" ForeColor="Black" Width="550" Multiline="True" />
</WindowsFormsHost>
</Grid>
</Window>
Я также использовал WPF RichTextBox, но я также не могу выровнять текст + изображения в центре
<RichTextBox VerticalContentAlignment="Stretch" Height="158" HorizontalAlignment="Left" Margin="10,247,0,0" Name="richTextBox1" VerticalAlignment="Top" Width="754" />
2 ответа
Ты можешь использовать BaselineAlignment
на Run
по центру выровнять текст. Вот пример:
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run Text="Some text" BaselineAlignment="Center"/>
<Image Height="100" Width="100" Source="Images\Desert.jpg"/>
<Run Text="Some more text" BaselineAlignment="Center"/>
</Paragraph>
<Paragraph/>
<Paragraph>
<Run Text="Paragraph 2" BaselineAlignment="Center"/>
<Image Height="100" Width="100" Source="Images\Desert.jpg"/>
<Run Text="More text" BaselineAlignment="Center"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
РЕДАКТИРОВАТЬ:
Чтобы применить форматирование ко всему RichTextBox
попробуйте вызвать этот метод после RichTextBox
заселено:
public void CenterText()
{
var text = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
text.ApplyPropertyValue(Inline.BaselineAlignmentProperty, BaselineAlignment.Center);
}
Я смог заставить это работать с
Span
с
BaseAlignment
атрибут установлен на
"Center"
.
<RichTextBox>
<FlowDocument>
<Paragraph>
<Span BaseAlignment="Center">
Center My Image
<Image ... />
</Span>
</Paragraph>
</FlowDocument>
</RichTextBox>