我在Windows Phone 8应用中有一个LongListSelector(在PivotItem中)控件.我看到一个奇怪的行为.有时LLS停止滚动.像冻结一样,我无法滚动.但是我可以使用AppBar,Pivot,Button Back等,甚至可以使用GroupHeader和JumpList.它是随机发生的(到目前为止,我还没有发现规律性),而且经常发生.之前我经常使用LLS,但是从未遇到过这些问题.
以下是LLS冻结的典型情况.
>转到带有LLS的页面.
>滚动LLS.
>点击LLS项,然后导航到其他页面.
>使用LLS返回页面.
> LLS不滚动.
这个袋子也可以其他方式出现.
强调:
>我不会将大收藏夹绑定到LLS(我的收藏夹大约10至50件(5组)).
>当LLS未冻结时,它的工作速度非常快,而且不会出现抖动.
>我在LLS项中有一个ListBox(1-6个字符串元素).
>我使用DataTemplateSelector(as implemented here).
> LLS冻结时,分析不会显示较差的响应.
我的XAML:
<phone:LongListSelector Name="LLSSimpleSearch" VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemsSource="{Binding ListGroup}"
toolkit:TiltEffect.IsTiltEnabled="True"
Margin="12,0,-12,0"
IsGroupingEnabled="True"
LayoutMode="List"
HideEmptyGroups="False"
GroupHeaderTemplate="{StaticResource LLSHeaderTemplate}"
JumpListStyle="{StaticResource LLSJumpList}"
ListFooterTemplate="{StaticResource LLSListFooter}">
ItemTemplate
<questionary:QuestTemplateSelector Content="{Binding}">
<questionary:QuestTemplateSelector.Template1>
<DataTemplate>
<ListBox></ListBox> <!-- ListBox with small collect-->
</DataTemplate>
<questionary:QuestTemplateSelector.Template1>
<questionary:QuestTemplateSelector.Template2>
<DataTemplate>
</DataTemplate>
</questionary:QuestTemplateSelector.Template2>
<questionary:QuestTemplateSelector.Template3>
<DataTemplate>
</DataTemplate>
</questionary:QuestTemplateSelector.Template3>
<questionary:QuestTemplateSelector.Template4>
<DataTemplate>
</DataTemplate>
</questionary:QuestTemplateSelector.Template4>
</questionary:QuestTemplateSelector>
在cs中:
LLSSimpleSearch.DataContext = GYSearchViewModel.Instance;
GYSearchViewModel.Instance.Load();
视图模型
private ObservableCollection<Group<Quest>> _listGroup = new ObservableCollection<Group<Quest>>();
public ObservableCollection<Group<Quest>> ListGroup
{
get
{
return _listGroup;
}
set
{
if (value != _listGroup)
{
_listGroup = value;
NotifyPropertyChanged("ListGroup");
}
}
}
public Load()
{
MyDataSource.Load((r) => { ListGroup= r; })
}
这里有些奇怪吗?在这段代码中,有潜在的问题吗?如果需要的话,我准备发表更多评论.感谢您的建议.
UPDATE(问题的解决)
我不能百分百确定,但99%可以确定ListBox中的问题.
<questionary:QuestTemplateSelector.Template1>
<DataTemplate>
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
</DataTemplate>
<questionary:QuestTemplateSelector.Template1>
我必须在列表中显示数据,然后在LLS中使用ListBox.实验方式,经过长时间的测试,我发现了冻结的规律性.然后得出结论,该问题在ListBox中.在问题属性IsHitTestVisible中提供了帮助.
<questionary:QuestTemplateSelector.Template1>
<DataTemplate>
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"
IsHitTestVisible="false"/>
</DataTemplate>
<questionary:QuestTemplateSelector.Template1>
现在没有问题.
解决方法:
手机必须呈现的更多控件(或项目)将导致所显示的项目总数降低.在我正在处理的WP8窗口上,要渲染的50个项目会使应用程序明显减速,以至于我不得不重新设计这些东西的加载和显示方式.
要么是加载延迟问题,要么是显示问题,或者两者兼而有之.您需要确定瓶颈,并决定权衡哪些因素才能使操作快速进行.
尝试使用静态数据加载控件(已经在手机应用程序上预加载),以查看其加载情况还是屏幕加载情况(例如划分征服类型的分析).