2011-12-13 32 views
4

我通過編輯ListBox的默認樣式知道,我可以在ListBox的末尾有Button在ListBox的末尾添加一個加載更多按鈕而不會丟失虛擬化?

<ScrollViewer x:Name="ScrollViewer" ...> 
    <StackPanel> 
     <ItemsPresenter /> 
     <Button /> 
    </StackPanel> 
</ScrollViewer> 

但是,這樣做將打破ListBox的虛擬化和渲染時間變得很長。

所有我能想到的是,

  1. 創建一個虛擬項目,並將其添加到我的項目集合中 視圖模型的結束,並在虛擬對象有一個Visibility屬性調用ButtonGridVisibility和將其設置爲Visibility.Visible
  2. 在我的ListBoxItemTemplate,有兩個Grids。一個顯示 正常的項目佈局,另一個顯示加載更多Button。 然後根據切換其Visibility ButtonGridVisibility屬性。

這可能工作,但我只是想知道是否有更簡單/更好的方法?

回答

3

找到我知道這是一個老的文章,但在情況下,一些人偶然發現了這一點:

有一個LongListSelector控制available out of the box in WP8或部分WP7的Windows Phone Toolkit,它非常整齊地支持這種情況。如果您想要在最後一項(或第一項之前)之後添加特定內容,您可以簡單地設置控件的ListFooter或ListHeader。您可以放入任何內容,並且相應地滾動此內容以及其餘項目。

所以對於WP7這應該是這樣的:

<toolkit:LongListSelector ItemsSource="{Binding Items}"> 
    <toolkit:LongListSelector.ListFooter> 
     <Grid> 
      <Button /> 
     </Grid> 
    </toolkit:LongListSelector.ListFooter> 
</toolkit:LongListSelector> 

其中toolkitxmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

+0

啊......我希望我一年前就知道這一點!非常感謝卡雷爾! –

1

這些日子裏有一些額外的功能可以幫助這種情況。其中之一是在ScrollViewer上增加了額外的視覺狀態,添加了「Horizo​​ntalCompression」和「VerticalCompression」視覺狀態組。通過使用這些並掛接到CurrentStateChanging事件中,您可以根據需要加載更多項目。如何實現這個

全部細節可以在Silverlight for Windows Phone Performance Team Blog.

+0

謝謝,其實我知道這一點,但是我不希望'ListBox'自動加載更多數據滾動到最後。我覺得有一個按鈕對用戶更清晰。 –