Как установить встроенные изображения вертикально по центру в 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>
Другие вопросы по тегам