3

我有一个非常简单的 xaml 文件,其中我将相同的段落和运行元素传递给 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 相同,但我真的想避免必须做这样的事情,因为毫无疑问会出现某些字体或文化设置的情况可怕地打破了这一切。

4

1 回答 1

3

我不是 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>

希望你能用这个!

于 2009-12-08T04:11:33.283 回答