如何在RichTextBox中垂直居中设置内嵌图像

Avi*_*ngh 3 wpf richtextbox windowsformshost

我正在研究WPF,我在RichTextBox中显示了RichText数据,因为它采用了WindowsFormHost,我正在使用WinForm RichTextBox来显示具有Images + Text的RichTextData.

但是,当显示RichTextData图像与Top对齐并且文本与Bottom对齐时,请参见下图,红色圆圈为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>
Run Code Online (Sandbox Code Playgroud)

我也使用过WPF RichTextBox,但在那里我也无法在中心对齐文本+图像

     <RichTextBox VerticalContentAlignment="Stretch" Height="158" HorizontalAlignment="Left" Margin="10,247,0,0" Name="richTextBox1" VerticalAlignment="Top" Width="754" />
Run Code Online (Sandbox Code Playgroud)

Ric*_*d E 7

您可以使用BaselineAlignmenta 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>
Run Code Online (Sandbox Code Playgroud)

编辑:

要在填充RichTextBox后调用此方法的整个尝试应用格式RichTextBox:

    public void CenterText()
    {
        var text = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
        text.ApplyPropertyValue(Inline.BaselineAlignmentProperty, BaselineAlignment.Center);
    }
Run Code Online (Sandbox Code Playgroud)