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:如何滚动数据网格以显示后面代码中的选定项目?的主要内容,如果未能解决你的问题,请参考以下文章

WPF Toolkit Datagrid - 如何关闭选择?

如何在 WPF Datagrid 上启用滚动条?

如何在 WPF 数据网格上自动滚动

WPF Toolkit DataGrid 列调整大小事件

WPF Grid不显示滚动条

鼠标滚动在带有 wpf 数据网格和其他 UI 元素的滚动查看器中不起作用