Mam UserControl
, która musi zawierać kilka kontrolek na górze i LongListSelector
poniżej. Całkowita wysokość całego obiektu UserControl
może (i prawie zawsze będzie) przekraczać wysokość ekranu, w takim przypadku cały obiekt musi być przewijany.Wydajność LongListSelector jest bardzo zła, gdy jest zawarta w ScrollViewer
Moja obecna konfiguracja jest następująca:
<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>
Rozwiązanie to spełnia moje potrzeby, ale też nie jest to duży problem: obecnie LongListSelector
zajmuje naprawdę dużo czasu, aby załadować, gdy ilość elementów w niej zawartych jest dość duża. Przetwarzanie 300 elementów zajmuje 8 sekund, aw tym czasie cały interfejs jest blokowany. Jeśli usunąć wszystko, ale LongListSelector
, tak:
<staff:UserContentControl
...>
<phone:LongListSelector ItemsSource="{Binding Items}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" />
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</staff:UserContentControl>
następnie LongListSelector
ładunki prawie natychmiast nawet ze znacznie większej ilości przedmiotów. Ale oczywiście potrzebuję tych innych kontroli nad nim, więc pytanie, co mogę zrobić, aby rozwiązać ten problem?
(związanych również pytanie: Bałem się, że LongListSelector
wewnątrz ScrollViewer
może spowodować podwójne przewijanie czy coś takiego, ale ostatecznie wszystko skończyło się dobrze pod tym względem nie jestem pewien, czy LongListSelector
jakoś wie, że jest w środku drugiej przewijania. kontrolować lub jeśli zdarzy się coś innego, czego nie jestem świadomy, niektóre wyjaśnienia, dlaczego działa dobrze, chociaż bardzo powolnie, byłyby bardzo doceniane.)
Robisz to źle. –
@MathiasLykkegaardLorenzen :) – Anton