2011-12-06 50 views
3

我改變了我的ListView控件模板看起來像這樣:的ListView與continious填充未虛擬化

<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 
    <ScrollViewer Background="{TemplateBinding Background}" 
         VerticalScrollBarVisibility="Auto" 
         Padding="{TemplateBinding Padding}" Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}" 
        VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" 
        ScrollViewer.IsDeferredScrollingEnabled="True"> 
     <StackPanel> 
      <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      <Border x:Name="FillerView" BorderThickness="0"/> 
     </StackPanel> 

    </ScrollViewer> 
</Border> 

這樣做的原因是,我想要的ListView的交替着色繼續。這是通過觸發FillerView邊界完成的。如果我從該模板中刪除Stackpanel和邊界Fillerview,我的ListView正在以非常快的速度進行虛擬化。如果我在那裏,它是非常緩慢的。

任何人都可以告訴我爲什麼虛擬化不起作用,當我使用上面的模板?哦,我不能移動Scrollviewer中的邊框FillerView,因爲我想讓底部的滾動條位於填充符之下。

謝謝!

+0

順便說一句,你是否將'ListView.ItemsPanel'設置爲'VirtualizingStackPanel'? – sll

+0

正如我所說,ListView工作正常,如果我刪除StackPanel和ItemsPresenter周圍的邊框。我還額外添加了這些代碼,但是當我在Itemspresenter中保留上述代碼時,Virtualisation仍處於關閉狀態。 m00ni

回答

2

虛擬化不起作用,因爲虛擬化需要ItemsPresenter的ItemsPanel使用實際可用大小進行測量。在你的情況下,你有一個StackPanel作爲ScrollViewer的內容,這將是ScrollViewer的IScrollInfo。現在,因爲StackPanel在排列方向上測量其無限大的子元素,這意味着它將測量具有無限高度的ItemsPresenter,所以ItemsPanel(它將是ItemsPresenter的子元素)不可能知道實際可用高度所以它不能虛擬化。

我不確定你的意思是關於交替着色的listview。如果你正在討論在列表視圖中改變項目的背景,那麼通常會使用AlternationConverter

+0

嘿,非常感謝您的回答。這可能是真的。 我想對邊框和堆棧面板進行的操作是繼續將列表視圖項下方的空白區域着色。因此,如果10個物品適合屏幕,但只有3個在列表中,我希望交替着色繼續到列表視圖的末尾,即使沒有物品了。這種着色由邊界完成。 – m00ni

+0

我剛纔檢查了是否有助於爲Scrollviewer或StackPanel明確設置高度。我也用DockPanel替換了StackPanel,但沒有任何作用,它仍然沒有虛擬化。 – m00ni

+0

沒有在ScrollViewer或StackPanel上設置高度不會有幫助。 StackPanel仍然會以無限的高度測量它的子項。真的,你不能做你想做的。如果StackPanel是IScrollInfo,那麼它會滾動每個項目 - 在你的情況下意味着ItemsPresenter是一個非常高的項目,邊界是另一個 - 或者ScrollContentPresenter是IScrollInfo,在這種情況下,它測量StackPanel的無限高度和它執行其內容的像素級別滾動(堆疊面板)。 – AndrewS