我有一个包含物品来源的ScrollViewer。此项中的项目数可能达到数万,并从Web服务器流式传输。我们已经设置了这两个属性:
VirtualizingStackPanel.VirtualizationMode="Recycling" ScrollViewer.IsDeferredScrollingEnabled="True"
这些工作非常适合拖动拇指(滚动条中间的按钮),但是当用户按住向下箭头或点击并按住DecreaseRepeatButton或IncreaseRepeatButton(隐藏按钮上方和下方)时拇指),延迟滚动不再受到尊重,项目滚动到视图中并咀嚼服务器资源。
我想做的是两个方面:
1)使用延迟滚动来显示向下/向上箭头。如果没有这个,我们可以增加重复按钮的延迟,因此按住按钮不会连续滚动。
2)更新减少/增加重复按钮的LargeChange,以便用户每次滚动10%。
我已经尝试下载“PART_VerticalScrollBar”的可视树,并在System.Windows.Controls.Primitives.ScrollBar上设置LargeChange无济于事。
我可以勾选滚动条的属性并更新拇指位置但是我再也无法拖动拇指。
非常感谢任何帮助。
答案 0 :(得分:2)
我让它使用控件模板。它仍然看起来很肮脏,但它确实有效。
<ControlTemplate x:Key="templateScroll"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="1*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RepeatButton Grid.Row="0"
Command="ScrollBar.LineUpCommand" Interval="1000" Style="{DynamicResource Scrollbar_LineButton}" Content=" ^" />
<Track Grid.Row="1" Name="PART_Track">
<Track.DecreaseRepeatButton>
<RepeatButton Command="ScrollBar.PageUpCommand" Interval="1000" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb />
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Command="ScrollBar.PageDownCommand" Interval="1000"/>
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Row="2" Interval="1000" Command="ScrollBar.LineDownCommand" Style="{DynamicResource Scrollbar_LineButton}" Content=" v" />
</Grid>
</ControlTemplate>
然后我通过获取PART_VerticalScrollBar并将其设置为后面的代码中动态应用模板:
scrollBarControl.SetValue(System.Windows.Controls.Primitives.ScrollBar.TemplateProperty, Me.Resources("templateScroll"))