2011-10-28 37 views
1

我有一個具有項目源的ScrollViewer。其中的項目數量可能會成千上萬,並從Web服務器流式傳輸。我們已經在設置這兩個屬性:ListView WPF:如何操作LargeChange和其他按鈕

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

這些工作完全罰款周圍拖動滑塊(按鈕,滾動條的中間),但是當用戶按住向下箭頭或點擊,按住上DecreaseRepeatButton或IncreaseRepeatButton(拇指上方和下方的不可見按鈕),延期滾動不再受到尊重,並且項目會滾動到視圖中並通過服務器資源咀嚼。

我想這樣做是雙重的:

1)遞延滾動的向下/向上箭頭。如果沒有這個,我們可以增加重複按鈕的延遲,所以按住按鈕不會連續滾動。

2)更新減少/增加重複按鈕的LargeChange,以便用戶每次滾動10%。

我已經嘗試降下「PART_VerticalScrollBar」的視覺樹,並在System.Windows.Controls.Primitives.ScrollBar上設置LargeChange無濟於事。

我可以鉤入滾動條的屬性和拇指位置更新,但我不能再拖動拇指。

任何幫助將不勝感激。

回答

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")) 
相關問題