ListView WPF:如何操作LargeChange和其他按钮

ListView WPF:如何操作LargeChange和其他按钮,wpf,performance,scrollbar,Wpf,Performance,Scrollbar,我有一个ScrollViewer,它有一个项目源。其中的项目数量可能达到数万个,并从web服务器流式传输。我们已经在设置这两个属性: VirtualizingStackPanel.VirtualizationMode="Recycling" ScrollViewer.IsDeferredScrollingEnabled="True" 这些工作在拖动拇指(滚动条中间的按钮)周围非常完美,但是当用户按住向下箭头或点击并按下RealeRePATButton或IncreaseRepeatButton

我有一个ScrollViewer,它有一个项目源。其中的项目数量可能达到数万个,并从web服务器流式传输。我们已经在设置这两个属性:

VirtualizingStackPanel.VirtualizationMode="Recycling" ScrollViewer.IsDeferredScrollingEnabled="True" 

这些工作在拖动拇指(滚动条中间的按钮)周围非常完美,但是当用户按住向下箭头或点击并按下RealeRePATButton或IncreaseRepeatButton(拇指上下不可见的按钮)时,延迟的滚动不再受尊重,项目滚动到视图中并浏览服务器资源

我想做两件事:

1) 向下/向上箭头使用延迟滚动。如果没有,我们可以增加重复按钮的延迟,这样按下按钮就不会连续滚动

2) 更新减少/增加重复按钮的较大更改,以便用户每次滚动10%

我已经尝试从“PART_VerticalScrollBar”的可视化树中向下搜索,并在System.Windows.Controls.Primitives.ScrollBar上设置了较大的更改,但没有成功

我可以钩住滚动条的属性并更新拇指的位置,但是我不能再拖动拇指了


任何帮助都将不胜感激。

我让它与控制模板一起工作。它看起来仍然像地狱,但它的工作

<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>
scrollBarControl.SetValue(System.Windows.Controls.Primitives.ScrollBar.TemplateProperty, Me.Resources("templateScroll"))