我在 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 周围定义边距控制什么也不做。