同事这两天在做 universal 项目的时候,遇到一个诡异的问题,即使设置 Page 为

缓存状态, 在页面跳转后, ListBox 的位置不会被缓存,怀疑是页面的缓存状态出了问题:

this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;

写了一个 demo,测试了一下:

1)在程序启动的时候,默认显示 PivotPage 页面。分别放置 ListView、 ItemsControl、ListBox 控件:

<Pivot Title="Pivot">
<PivotItem Header="PivotItem 1">
<Grid>
<ListView x:Name="lv1" ItemsSource="{Binding list}"/>
</Grid>
</PivotItem> <PivotItem Header="PivotItem 2">
<Grid>
<ScrollViewer>
<ItemsControl x:Name="lv2" ItemsSource="{Binding list}"/>
</ScrollViewer>
</Grid>
</PivotItem> <PivotItem Header="PivotItem 3">
<Grid>
<ListBox IsTapEnabled="False" x:Name="lv3" ItemsSource="{Binding list}"/>
</Grid>
</PivotItem>
</Pivot>
<Button Content="Page2" Click="Button_Click" HorizontalAlignment="Left" Margin="261,531,0,0" VerticalAlignment="Top"/>

2)在 C# 页面,进行数据绑定:

 public List<string> list { get; set; }

 public PivotPage()
{
this.InitializeComponent(); this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled; // 填充字符串
list = new List<string>(); for (int i = ; i < ; i++)
{
list.Add("测试内容 : " + i);
} // 设置当前页面的上下文为 this
this.DataContext = this;
}

放置一个跳转按钮:

 private void Button_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(Page2));
}

页面启动后,分别滑动  ListView、ItemsControl、ListBox 控件:

3)点击 按钮,跳转到 Page2, 然后再 点击 GoBack 按钮:

回到 PivotPage 后, 滑动 ListBox 控件,就会诡异的返回到第一项。而 ListView 和 ItemsControl 没有这个问题:

    另外,我怀疑,在 store app 中,ListBox 其实是作为一个  multiple ListPicker 用的,

数据绑定重点使用 ListView 和 GridView 了,个人的猜测 ....

补充:

1、针对 ListBox:

     ItemsPanel 属性 默认应该是 VirtualizingStackPanel ,当返回的时候,会返回顶部:

当换为 ItemsStackPanel 时,就没问题了,导航返回后,单击不会返回顶部:

(ItemsStackPannel: MSDN)

2、 ListView 控件在做 折行布局时,如果 ListView 的ItemsPanel属性为WrapGrid 则在 Navigate  back 的时候,

如果滑动列表,则会返回顶部;如果为 ItemsWrapGrid,则不会:

<ListView x:Name="lv1" ItemsSource="{Binding list}" ItemTemplate="{StaticResource template}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid  Orientation="Horizontal"/> <!-- 如果使用 <WrapGrid/> 作为容器,则出现导航回来后,返回顶部-->
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>

Demo 下载链接

Demo2 下载链接

04、数据绑定控件 ListBox 的一个 Bug的更多相关文章

  1. ASP.NET数据绑定控件简介

    •数据绑定分为数据源和数据绑定控件两部分(①数据绑定控件通过数据源获取和修改数据②数据绑定控件通过数据源隔离数据提供者和数据使用者)数据绑定控件→数据源→数据库•数据源:SqlDataSource(连 ...

  2. ASP.NET数据绑定控件

    数据绑定控件简介 数据绑定分为:数据源 和 数据绑定控件 两部分,数据绑定控件通过数据源来获得数据,通过数据源来隔离数据提供者和数据使用者,数据源有:SqlDataSource,AccessDataS ...

  3. 【转】ASP.NET常用数据绑定控件优劣总结

    转自:http://www.cnblogs.com/Olive116/archive/2012/10/24/2736570.html ASP.NET常用数据绑定控件优劣总结   本文的初衷在于对Asp ...

  4. asp.net学习之 数据绑定控件--List数据绑定控件

    原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...

  5. asp.net学习之数据绑定控件、数据源控件概述

    原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细:      ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字 ...

  6. 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

    原文:如何解决FormView中实现DropDownList连动选择时出现 "Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的 ...

  7. ASP.NET常用数据绑定控件优劣总结

    本文的初衷在于对Asp.net常用数据绑定控件进行一个概览性的总结,主要分析各种数据绑定控件各自的优缺点,以便在实际的开发中选用合适的控件进行数据绑定,以提高开发效率. 因为这些数据绑定控件大部分都已 ...

  8. 数据绑定控件之Repeater

    引言 前几篇的文章在说AJAX的内容,利用AJAX技术能够开发出高效运行的网站应用程序,不过在进行B/S项目开发时只拥有AJAX技术是远远不够的,踏入到B/S要学的东西会更多,但相较C/S的复杂逻辑结 ...

  9. MFC编程入门之二十四(常用控件:列表框控件ListBox)

    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...

随机推荐

  1. 1)Linux程序设计入门--基础知识

    )Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...

  2. iOS:shareSDK第三方登录

    shareSDK第三方登录跟分享差不多,比较简单,前面已有介绍.这里简单写一下第三方登录吧. 1.首先:我用到了QQ.微信.新浪这三个平台的登录,需要到它们各自的开发者平台注册开发者账号,这是我的QQ ...

  3. mongodb聚合管道用法

    基本用法 db.collection.aggregate( [ { <stage> }, ... ] ) stage如下 名称 描述 $addFields 将新的字段添加到文档中,输出的文 ...

  4. C#文件系统管理【转】

    目录 前言 Directory类和DirectoryInfo类 File类和FileInfo类 Path类 前言 管理文件系统主要是对计算机中文件和目录的管理,例如,读取文件信息.删除文件和读取目录信 ...

  5. .NET-MVC站点发布注意事项

    在进行MVC站点发布的过程中需要注意bin文件,使用vs2013自带的发布功能容易漏掉一些dll文件,所以在发布之后需要将程序的bin目录下的文件拷贝到发布好的iis站点下面

  6. 一致性哈希算法(Consistent Hashing) .

    应用场景 这里我先描述一个极其简单的业务场景:用4台Cache服务器缓存所有Object. 那么我将如何把一个Object映射至对应的Cache服务器呢?最简单的方法设置缓存规则:object.has ...

  7. JQuery 控制div滚动条保持最下

    $("#session_show").animate({ scrollTop: $("#session_show").scrollHeight },1000); ...

  8. gre tunnel搭建

    应用场景: 客户端(client)与服务器A在同一个运营商网络,应用部署在服务器B,服务器A .B之间建立tunnel,A设置dnat,client通过访问A的8000端口来访问服务器B,B返回的响应 ...

  9. android源码如何起步与阅读方法

    显然Eclipse不是阅读Android源码的好工具,不流畅,搜索低效,继承性关系/调用关系都无法有效查看.推荐Source Insight,在这个工具帮助下,你才可以驾驭巨大数量的Android 源 ...

  10. Android系统源代码——所需工具

    一.概述 众所周知,Android移动操作系统是Google花费了很大的财力.物力及人力的前提下,推广到世界各个角落,以开放源代码的方式(当然也不是完全开放所有),使其在世界范围内迅速漫延开来,到目前 ...