我有一个UserControl,它需要在顶部包含一堆控件以及下面的LongListSelector。整个UserControl的高度可能会(并且几乎总是会)超过屏幕高度,在这种情况下,整个UserControl必须可以滚动。
目前的设置如下:
然后
(另一个相关的问题:我担心
目前的设置如下:
<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秒钟,在此期间整个用户界面都会被阻塞。如果我将其他所有内容都删除,只留下 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
是否知道它在其他可滚动控件中,或者是否发生了我不知道的其他事情。如果能解释为什么它能正常工作,尽管非常缓慢,那将不胜感激。)