2013-01-18 17 views
5

我有一個UserControl需要包含頂部的一堆控件和它們下面的LongListSelector。整個UserControl的總高度可能(並且幾乎總是)會超過屏幕高度,在這種情況下,整個UserControl必須可滾動。當在ScrollViewer中包含LongListSelector性能非常差

我目前的設置如下:

<staff:UserContentControl 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:controls="clr-namespace:MyApp.Controls" 
    xmlns:staff="clr-namespace:MyApp.Helpers" 
    x:Class="MyApp.Controls.RemoteHomePage" 

    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}"> 

    <ScrollViewer> 
     <ScrollViewer.Content> 
      <StackPanel> 
       <TextBlock Txt="Text1" Sign="@" /> 
       <TextBlock Txt="Text2" Sign="#" /> 
       <controls:Divider /> 

       <TextBlock Txt="Text3" Sign="~" /> 
       <TextBlock Txt="Text4" Sign="~" /> 
       <controls:TextDivider Text="Divider text" /> 

       <phone:LongListSelector ItemsSource="{Binding Items}"> 
        <phone:LongListSelector.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Title}" /> 
         </DataTemplate> 
        </phone:LongListSelector.ItemTemplate> 
       </phone:LongListSelector> 
      </StackPanel> 
     </ScrollViewer.Content> 
    </ScrollViewer> 
</staff:UserContentControl> 

該解決方案滿足我的需求,但也有一個很大的問題:目前LongListSelector所花的時間真的很多,當它包含的項目量是相當大的負荷。處理300個項目需要8秒,並且在此期間整個UI都被阻止。即使有顯著較大的物品的數量幾乎立即

<staff:UserContentControl 
    ...> 

    <phone:LongListSelector ItemsSource="{Binding Items}"> 
     <phone:LongListSelector.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}" /> 
      </DataTemplate> 
     </phone:LongListSelector.ItemTemplate> 
    </phone:LongListSelector> 
</staff:UserContentControl> 

然後LongListSelector負載:如果我刪除一切,但LongListSelector,像這樣。但顯然,我需要上面的其他控件,所以問題是我能做些什麼來解決這個問題?

(另外相關的問題:我很擔心LongListSelectorScrollViewer可能導致雙滾動或類似的東西,但最終一切都變成了在這方面就好了,我不知道,如果LongListSelector莫名其妙地知道,這是內部的其他滾動。控制或者是否有其他事情發生,我不知道,有些解釋爲什麼它能正常工作,雖然速度很慢,但是非常感謝。)

+1

你做錯了。 –

+0

@MathiasLykkegaardLorenzen :) – Anton

回答

13

不要使用滾動瀏覽器,因爲它會使longlistselector認爲它有可用的無限高的屏幕,顯示它的所有項目。 而不是解決你的用例使用頁眉和頁腳屬性添加數據上方或下方的列表項。

1

您不能強制ScrollViewer虛擬化LongListSelector項目。

所以你只需要通過LongListSelector來模擬它的行爲。

使第一個項目包含所有你需要的元素形式StackPanel(1'st itemtemplate)。其他元素將是基本的LongListSelector元素(第2個itemtemplate)。

下面是說明如何設置不同模板的項目:Styling a selected ListViewItem in Windows 8 CP