WPF Toolkit:如何滚动数据网格以显示后面代码中的选定项目?
Posted
技术标签:
【中文标题】WPF Toolkit:如何滚动数据网格以显示后面代码中的选定项目?【英文标题】:WPF Toolkit: how to scroll datagrid to show selected item from code behind? 【发布时间】:2010-12-31 09:21:46 【问题描述】:我尝试了以下方法,所有这些都在函数 ScrollIntoView 上失败并给出 NullReferenceException:
// doesn't work
grid.SelectedItem = sItem;
grid.ScrollIntoView(sItem);
// doesn't work
grid.SelectedItem = sItem;
grid.Focus();
grid.CurrentColumn = grid.Columns[0];
grid.UpdateLayout();
grid.ScrollIntoView(sItem,grid.Columns[0]);
// doesn't work
grid.SelectedItem = sItem;
grid.UpdateLayout();
grid.ScrollIntoView(sItem);
问题是,当我从代码隐藏中选择一行时,选择不可见 - 它位于底部的某个位置。除非用户滚动,否则他们会觉得选择消失了。我需要将 DataGrid 滚动到用户可以看到选择的位置。
我也尝试过“BringIntoView”,但没有成功。
【问题讨论】:
【参考方案1】:试试:
grid.SelectedItem = sItem;
grid.UpdateLayout();
grid.ScrollIntoView(grid.SelectedItem);
【讨论】:
在第一个语句中我分配 grid.SelectedItem = sItem,你认为 grid.SelectedItem 和 sItem 有什么不同吗?对不起,它的错误答案永远不会起作用。 SelectedItem 包装在依赖属性上,因此我的代码与您所拥有的不同。试一试,我遇到了同样的问题,这对我有用。参见 dissembly: [Category("Appearance"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Bindable(true)] public object SelectedItem get return base.GetValue(SelectedItemProperty); set base.SetValue(SelectedItemProperty, value); Akash,你试过了吗?【参考方案2】:虚拟化堆栈面板没有项目容器,因为视图之外的项目不存在项目容器,这就是显示此错误的原因。禁用虚拟化暂时解决了这个问题,该错误已报告给 codeplex 工具包项目。
【讨论】:
以上是关于WPF Toolkit:如何滚动数据网格以显示后面代码中的选定项目?的主要内容,如果未能解决你的问题,请参考以下文章