首页 > 解决方案 > Xaml + InlineUIContainer 中的 RichTextBox

问题描述

鉴于以下 Xaml,为什么 100,150 处的 RichTextBox 的 123 未对齐?您会注意到,在同一个 RichTextBox 中,如果我将文本直接作为 TextBlock 内联,那么它会与正常运行保持一致。如果我把它放在 ContentPresenter 里面,它就会变得很古怪。

我尝试使用填充和边距,但无法对齐。

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <DataTemplate x:Key="Test">
            <TextBlock Text="{Binding}" Foreground="Red" />
        </DataTemplate>

    </Window.Resources>
    <Grid>
        <TextBlock Text="Abc;123" Margin="100,100,0,0" />
        <RichTextBox>
            <RichTextBox.Document>
                <FlowDocument>
                    <Paragraph>
                        <Run>Abc</Run>
                        <Run>;</Run>
                        <Run>123</Run>
                    </Paragraph>
                </FlowDocument>
            </RichTextBox.Document>
        </RichTextBox>
        <ContentPresenter Content="Abc;123" Margin="100,120,0,0" ContentTemplate="{StaticResource Test}" />

        <RichTextBox Margin="100,150,0,0">
            <RichTextBox.Document>
                <FlowDocument>
                    <Paragraph>
                        <InlineUIContainer>
                            <TextBlock Text="Abc" />
                        </InlineUIContainer>
                        <Run>;</Run>
                        <InlineUIContainer>
                            <ContentPresenter Content="123" />
                        </InlineUIContainer>
                    </Paragraph>
                </FlowDocument>
            </RichTextBox.Document>
        </RichTextBox>

    </Grid>
</Window>

标签: c#wpf

解决方案


您需要InlineUIContainer.BaselineAlignmentContentPresenter.

<InlineUIContainer BaselineAlignment="Center">
    <ContentPresenter Content="123" />
</InlineUIContainer>

推荐阅读