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 требует некоторого поля, чтобы он отображался так же, как RichTextBlock, но я действительно хочу избежать необходимости делать что-либо подобное, поскольку, несомненно, будет ситуация, когда какой-то шрифт или настройка культуры ломает все это ужасно.


person Ash    schedule 21.10.2009    source источник


Ответы (1)


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

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

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

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

person Minustar    schedule 08.12.2009