我在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,我放置了一个包含带有边距的ContentPresenter的ScrollViewer。这是一个混乱的解决方案,所以我希望有人知道更好的解决方案。
如果我使用的是除FixedDocument之外的任何控件,我可以在ScrollViewer中显示的对象周围定义边距,但无论出于何种原因,您都无法在FixedDocument周围定义边距,并定义边距在PageContent控件周围什么都不做。