控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

Win8中ListBox的ScrollIntoView方法失效

作者:未知 出处:cnblog 2013年04月18日 阅读:

 在做项目的时候因为要从A页面导航到B页面, A页面是一些新闻的列表,B页面是显示在A页面点击的新闻的详细页面,并且也显示新闻的列表。

 
(图片不知道怎么上传失败了,等下回家再试试)
 
现在我在A页面如果点击的列表是后面的,B页面列表就不能将我点击的那个项显示在视图里面;尽管我在LoadState(因为我的页面继承LayoutAwarePage)方法里面设置了SelectedIndex(注:按一般情况的话应该是设置SelectedIndex或者调用ScrollIntoView方法都能实现,因为我自己单独建立的一个测试页面只需要设置SelectedIndex或者单独调用ScrollIntoView方法,都能实现当前选中项就可以显示在视图当中)并且调用了ScrollIntoView方法,发现还是不能达到效果。于是在网上搜索了下貌似有人在Silverlight开发中也遇到了这个问题,于是我就按照他的办法在ScrollIntoView方法前面调用了UpdateLayout方法;oh ye还真的可以。
 
   protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            if (pageState == null)
            {
                _informationListElementCollection = navigationParameter as EastMoney_Model.NewsListData;
                if (_informationListElementCollection != null)
                {
                    listBox.ItemsSource = _informationListElementCollection;
                    listBox.SelectedIndex = _informationListElementCollection.SelectedIndex;
                    listBox.UpdateLayout();//加上这句就可以了
                    listBox.ScrollIntoView(listBox.Items[listBox.SelectedIndex + 4]);//单独使用这个方法不能实现效果,必须和UpdateLayout来一同实现
                    
                }
            }
        }
继续查询这个原因有人说是在修改了ListBox数据源的时候会出现这个问题。可是我的项目里面没有修改数据源呀。为什么也会出现这个问题?还有更奇怪的事发生了,我在页面的Load事件里面只调用ScrollIntoView方法没有调用UpdateLayout方法,居然也能实现,我真是奇怪了。但是我如果只是单独设置SelectedIndex却又不能实现我需要的效果(跟踪调试了好久不知道什么原因 求大神指教)。
 
void NewsText_Loaded(object sender, RoutedEventArgs e)
        {
            listBox.ScrollIntoView(listBox.Items[listBox.SelectedIndex + 4]);//在这里单独调用这个能实现
           // listBox.SelectedIndex = _informationListElementCollection.SelectedIndex;//单独调用不能实现
        } 
 
 
我个人猜测可能是我的页面比较复杂ListBox里面的项目的布局还没有确定,我必须先调用UpdateLayout方法来确定里面子项的布局。然后调用ScrollIntoView才有效。因为我发现在Load方法执行前 会先执行ListBox的LayoutUpdated事件方法。因为调用UpdateLayout方法也会执行该方法。所以大家以后如果遇到了类似问题就先调用下UpdateLayout方法吧。
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统