要疯掉了,WPF真是极其之难用啊

饭纲落3DS 2014-01-14 02:02:04
VS2010+WPF, 我只是要实现ListView的焦点跳转功能。

就是一个ListView里面有很多行,不管滚动条处于任意位置,点击一个按钮,就可以跳到指定的行

但是就是实现不了,item始终为null,谁能给个方向,感谢..

private void idBtn_Search_Click(object sender, RoutedEventArgs e)
{
//...
//...
// i就是我要跳转到的行
ListViewItem item = (ListViewItem)idList_Resource.ItemContainerGenerator.ContainerFromIndex(i);
item.Focus();
idList_Resource.SelectedIndex = i;

//...
}
...全文
1791 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
饭纲落3DS 2014-02-12
  • 打赏
  • 举报
回复
很多天前的帖子,结贴把。 回想一下后来好像是用ItemContainerGenerator.ContainerFromItem()来实现的, ItemContainerGenerator.ContainerFromIndex()这个方法始终不行,貌似是VS2010下的bug,或者我用的.Net版本bug? 搞不清楚
WalkOnly 2014-01-27
  • 打赏
  • 举报
回复
你可以使用绑定,然后直接操控数据源就能达到你要的效果。WPF因为多了路由事件和依赖属性,所以在数据传递和消息处理上跟以前的编程模式很不一样,如果你不用这两种方法,还不如直接使用原来的编程工具
yangxk120 2014-01-17
  • 打赏
  • 举报
回复
用绑定的方式很容易实现啊,那有什么难的啊
馒头仔 2014-01-17
  • 打赏
  • 举报
回复
WPF用习惯了真心好用
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
Lz 可以换成DataGrid显示数据啊。DataGrid有这种跳转功能,

       this.dvServerPackages.SelectedIndex = lastIndex;
                this.dvServerPackages.ScrollIntoView(this.dvServerPackages.SelectedItem);
刚经过测试,ListView也有ScrollIntoView方法,使用方法和DataGrid一样。
  • 打赏
  • 举报
回复
Lz 可以换成DataGrid显示数据啊。DataGrid有这种跳转功能,

       this.dvServerPackages.SelectedIndex = lastIndex;
                this.dvServerPackages.ScrollIntoView(this.dvServerPackages.SelectedItem);
hellocondition 2014-01-15
  • 打赏
  • 举报
回复
你实现的方法有问题,应该用绑定的方法来实现,将你的数据项中添加一个bool变量(数据项需要用类来实现,并且继承了INotifyChanged接口),让这个变量值改变时调用INotifyChanged接口,将这个bool变量与ListViewItem的IsSelected绑定,你只需要修改数据项中的bool变量值就可以选中对应的ListViewItem了。
Bonjour-你好 2014-01-14
  • 打赏
  • 举报
回复
最好提供测试数据。
杨门剑侠 2014-01-14
  • 打赏
  • 举报
回复
纠正一下,WPF不难用,而且很好用。
杨门剑侠 2014-01-14
  • 打赏
  • 举报
回复
你先用这个获取键盘焦点试试 listview的Item获取焦点很难。 Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render,new Action(() => Item1.Focus()));

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧