2013-01-18 2 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 어떻게 든 알고 있는지 확실하지 않습니다 결국 모든 것은이 점에서 잘 밝혀졌다. 컨트롤이나 다른 일이 생기면 잘 모르겠다. 왜 그렇게 잘 동작하는지에 대한 설명은 매우 느리지 만, 크게 감사하겠습니다.)

+1

잘못하고 있습니다. –

+0

@MathiasLykkegaardLorenzen :) – Anton

답변

13

은 스크롤 뷰어를 사용하지 마십시오 : 여기

는 항목에 다른 템플릿을 설정하는 방법에 대한 설명입니다. 대신 머리글 및 바닥 글 속성을 사용하여 목록 항목 위 또는 아래에 데이터를 추가하여 사용 방법을 해결하십시오.

1

강제로 LongListSelector 항목을 가상화 할 수는 없습니다.

그래서 LongListSelector에 의해서만 동작을 모방해야합니다.

첫 번째 항목에는 필요한 모든 요소가 StackPanel (1 번째 항목 템플릿)으로 포함됩니다. 그리고 다른 요소는 기본 LongListSelector 요소 (2'nd itemtemplate)입니다. 그것은 longlistselector이 가능한 무한 키 큰 화면을 가지고 있다고 생각하고 모든 항목을 렌더링하기 때문에 Styling a selected ListViewItem in Windows 8 CP