RichTextBox против FlowDocumentScrollViewer - Почему они выглядят такими разными?

У меня есть очень простой файл xaml, в котором я передаю одни и те же элементы Paragraph и Run в RichTextBox и FlowDocumentScrollViewer. Оба выглядят совершенно по-разному - это не то, что я ожидал.

Я понимаю, что вы можете стилизовать либо FlowDocument, либо контейнеры, чтобы они выглядели одинаково, но я ожидал, что они оба наследуют одинаковые настройки по умолчанию.

Вот мой код:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="80" />
        <RowDefinition Height="80" />
        <RowDefinition Height="80" />
    </Grid.RowDefinitions>
    <RichTextBox Grid.Row="0">
        <FlowDocument>
            <Paragraph>
                <Run>Here is some text</Run>
                <LineBreak />
                <Run>Here is some more text</Run>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>
    <TextBlock Grid.Row="1" Padding="6,0,0,0">
        <Run>Here is some text</Run>
        <LineBreak />
        <Run>Here is some more text</Run>
    </TextBlock>
    <FlowDocumentScrollViewer Grid.Row="2" IsHitTestVisible="True" VerticalScrollBarVisibility="Hidden">
        <FlowDocument>
            <Paragraph>
                <Run>Here is some text</Run>
                <LineBreak />
                <Run>Here is some more text</Run>
            </Paragraph>
        </FlowDocument>
    </FlowDocumentScrollViewer>
</Grid>

Мой вопрос

Есть ли какой-нибудь способ убедиться, что и RichTextBox, и FlowDocumentScrollViewer отображают FlowDocument одинаково? В идеале, чтобы вы не могли определить разницу между ними - без необходимости "жестко кодировать" поля, шрифты и т. Д. В одну или другую.

Вы заметите, что в моем примере выше мой Textblock требует некоторого Margin, чтобы он отображал то же самое, что RichTextBlock, но я действительно хочу избежать необходимости делать что-то подобное, поскольку, несомненно, возникнет ситуация, когда некоторые шрифты или настройки языка ломает все это ужасно

1 ответ

Я не эксперт в WPF, тем более что я действительно использую RichTextBox, но привязка свойств одного из них к стилям (возможно, даже шаблонным) может решить вашу проблему.

Свойства по умолчанию FlowDocument отличаются от свойств RTB или TB. (Шрифт по умолчанию для FlowDocument - Грузия!!!)

    <RichTextBox>
        <FlowDocument Name="rtDoc"
                      PagePadding="{Binding PagePadding, ElementName=flDoc}"
                      ...
                      FontFamily="{Binding FontFamily, ElementName=flDoc}">
            ...
        </FlowDocument>
    </RichTextBox>
        ...
    <FlowDocumentScrollViewer>
        <FlowDocument Name="flDoc" />
    </FlowDocumentScrollViewer>

Надеюсь, вы можете использовать это!

Другие вопросы по тегам