我想我现在明白你所说的“在顶部”是什么意思 - 一种方法是使用控制模板,使 ScrollContentPresenter 跨越网格的两行和两列,而 ScrollBars 位于第二行和第二列。滚动条设置为半透明。内容现在将在滚动条下绘制!
我尝试过的风格如下:
<Style x:Key="SVStyle" TargetType="{x:Type ScrollViewer}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.ColumnSpan="2" Grid.RowSpan="2"/>
<ScrollBar Name="PART_VerticalScrollBar"
HorizontalAlignment="Right"
Opacity="0.5"
Grid.Column="1"
Value="{TemplateBinding VerticalOffset}"
Maximum="{TemplateBinding ScrollableHeight}"
ViewportSize="{TemplateBinding ViewportHeight}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
<ScrollBar Name="PART_HorizontalScrollBar"
VerticalAlignment="Bottom"
Orientation="Horizontal"
Opacity="0.5"
Grid.Row="1"
Value="{TemplateBinding HorizontalOffset}"
Maximum="{TemplateBinding ScrollableWidth}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
示例用法:
<ScrollViewer HorizontalScrollBarVisibility="Auto" Style="{StaticResource SVStyle}" >
<StackPanel>
<Button Height="100" Width="800" >Hello World</Button>
<Button Height="100" Width="800" >Hello World</Button>
<Button Height="100" Width="800" >Hello World</Button>
<Button Height="100" Width="800" >Hello World</Button>
<Button Height="100" Width="800" >Hello World</Button>
<Button Height="100" Width="800" >World World</Button>
<Button Height="100" Width="800" >Hello World</Button>
<Button Height="100" Width="800" >Hello World</Button>
</StackPanel>
</ScrollViewer>
结果是这样的:
![花哨的透明滚动](https://i.stack.imgur.com/bBKW6.png)
修改这一点很简单,使 ScrollBars 最初是非常透明的(例如,Opacity = 0.2),并在鼠标进入 ScrollBar 时使它们变得更加不透明。这将是一个很好的效果,并且会在需要它们之前将 ScrollBars 挡在外面。
编辑:
我已经在我的博客上写了这个,供那些想要更多细节的人使用。