2013-01-18 7 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全体がブロックされます。でも、アイテムのかなり大きな量で、その後LongListSelector負荷ほとんどすぐ

<staff:UserContentControl 
    ...> 

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

:私はそうのように、LongListSelector以外のすべてを削除した場合。しかし明らかに私はそれ以上のコントロールが必要なので、この問題を解決するにはどうすればよいですか?

(また、関連する質問:私はScrollViewer内部LongListSelectorはそのような二重のスクロールや何かを引き起こす可能性がありますが、最終的にすべてが、この点でうまく判明ことを心配していた私はLongListSelectorは何とかそれは他のスクロールの内側にあることを知っているかはわかりません。何か他のことが起こった場合は、私が気づいていない場合は、非常に遅いが、それはうまく動作するいくつかのexplainantionが大いに感謝します。)

+1

あなたは間違っています。 –

+0

@MathiasLykkegaardLorenzen :) – Anton

答えて

13

がスクロールビューアを使用しないでください:ここで

は、アイテムに異なるテンプレートを設定する方法の説明です。 代わりに、ヘッダーとフッターのプロパティを使用して、あなたのリスト項目の上または下のデータを追加してください。

1

強制的にScrollViewer LongListSelectorアイテムを仮想化することはできません。

したがって、LongListSelectorだけで動作を模倣する必要があります。

最初のアイテムに、StackPanel(1番目のitemtemplate)という必要な要素がすべて含まれているようにします。そして、他の要素は基本的なLongListSelector要素(2'nd itemtemplate)になります。それはlonglistselectorはそれが可能な無限に背の高い画面を持っていると思うし、そのすべてのアイテムをレンダリングするようになりますので、Styling a selected ListViewItem in Windows 8 CP

関連する問題