2

我在 DocumentViewer 中显示 FixedDocument,默认情况下,ScrollViewer 显示的文档在文档顶部上方或底部下方没有边距。

我想要更改 DocumentViewer 的样式,以便滚动条沿 DocumentViewer 的整个边缘延伸,这是文档顶部上方和底部下方的边距,但如果顶部和/或底部无法看到文档,文档分别延伸到 DocumentViewer 的顶部和/或底部边缘。(如果我有“声誉”,我可以张贴图片来展示我正在努力实现的目标。)

问题是 ScrollViewer 使用 ScrollContentPresenter 来显示 FixedDocument,并且您不能在 ScrollContentPresenter 中填充内容(或者至少我还没有找到方法)。

使用以下代码,我在 DocumentViewer 的样式中修改了 ScrollViewer 的样式,我让它看起来正确,但由于某种原因,它不会启用垂直滚动条,直到您单击文档,而水平滚动条永远不会启用:

<ControlTemplate TargetType="{x:Type ScrollViewer}">
    <Grid>
        <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions>
        <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions>

        <ScrollViewer CanContentScroll="True"
                   HorizontalScrollBarVisibility="Hidden"
                   VerticalScrollBarVisibility="Hidden">
            <ContentPresenter  Content="{TemplateBinding Content}" Margin="0,50,0,50"/>
        </ScrollViewer>

        <ScrollBar x:Name="PART_VerticalScrollBar" Orientation="Vertical" Grid.Column="1" Grid.Row="0" Minimum="0" Maximum="{TemplateBinding ScrollableHeight}" Value="{TemplateBinding VerticalOffset}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>

        <ScrollBar x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Column="0" Grid.Row="1" Minimum="0" Maximum="{TemplateBinding ScrollableWidth}" Value="{TemplateBinding HorizontalOffset}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
    </Grid>
</ControlTemplate>

通常有一个 ScrollContentPresenter,我在其中放置了一个 ScrollViewer,其中包含一个带边距的 ContentPresenter。这是一个混乱的解决方案,所以我希望有人会知道更好的解决方案。

如果我使用的是 FixedDocument 以外的任何控件,我可以只在 ScrollViewer 中显示的对象周围定义一个边距,但无论出于何种原因,您都不能在 FixedDocument 周围定义边距,也不能在 PageContent 周围定义边距控制什么也不做。

4

0 回答 0