DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。
本文将帮助用户解决使用DevExpress WPF的网格控件时关于行聚焦和选择的常见问题。
获取DevExpress v24.1正式版下载(Q技术交流:532598169)
GridControl自动选择第一行
问题
DevExpress WPF GridControl在启动时自动聚焦第一行。
解决方案
禁用DataControlBase.AllowInitiallyFocusedRow属性,在这种情况下,DevExpress WPF GridControl在启动时不聚焦或不选择任何行。
注意:一旦最终用户聚焦一行,GridControl至少包含一个聚焦行。
用户无法聚焦GridControl中的任何行或单元格
问题
不能聚焦GridControl中的任何单元格或行。
解决方案
若要在GridControl中允许行和单元格焦点,请验证GridControl的DataViewBase.NavigationStyle属性是否设置为Cell。
GridControl在设置数据源后失去选择和焦点
问题
当GridControl的ItemsSource被重置时,GridControl会重新生成它的所有行。
解决方案
要在GridControl中保留选择、焦点、展开的主行和其他行设置,必须手动将这些设置保存到本地变量,您现在可以重置ItemsSource并手动恢复保存的值。
如果控件失去焦点,则焦点元素的背景颜色会改变
问题
当GridControl失去焦点时,所选行的颜色会逐渐消失。
解决方案
将视图的DataViewBase.FadeSelectionOnLostFocus属性设置为false。
条件格式不适用于聚焦行或单元格
问题
格式条件样式的优先级低于聚焦行背景颜色。
解决方案
要显示突出显示的单元格和行,处理TableView.CustomRowAppearance和TableView.CustomCellAppearance事件。
启用多重选择模式时,聚焦行不突出显示
问题
如果使用多行选择并在代码中设置DataControlBase.CurrentItem属性,则聚焦的行不会突出显示;只有虚线边框可见。
解决方案
启用多重选择后,DataControlBase.CurrentItem和DataControlBase.SelectedItem属性引用不同的项。DataControlBase.CurrentItem管理当前关注的项,而DataControlBase.SelectedItem用于被选中的对象,若要聚焦和突出显示一行,请指定这两个属性。
在代码后面设置当前项和当前列属性后,单元格编辑器不会出现
问题
在后面的代码中更改DataControlBase.CurrentItem和DataControlBase.CurrentColumn属性之后,您就不能打开被聚焦单元格的编辑器。如果目标行位于视窗之外,则可能发生这种情况。
解决方案
由于虚拟化机制,GridControl应该为目标数据行初始化相应的项。为了防止在打开单元格编辑器时出现问题,在更新DataControlBase.CurrentItem和DataControlBase.CurrentColumn属性后,使用BeginInvoke方法调用DataViewBase.ShowEditor 方法。
C#
cs
gridControl.CurrentItem = Items.First();
Dispatcher.BeginInvoke(new Action(() => {
tableView.ShowEditor(true);
}));
如何禁用单个行和单元格的选择
问题
您希望阻止选择某些行和单元格。
解决方案
处理以下事件:DataViewBase.CanSelectRow, TableView.CanSelectCell, DataViewBase.CanUnselectRow和TableView.CanUnselectCell。
将ViewModel属性绑定到选定项集合的问题
问题
将ViewModel属性绑定到GridControl的DataControlBase.SelectedItems属性,即使在用户选择行之后,该属性也返回null。
解决方案
确保用一个空集合初始化ViewModel的属性,GridControl将选定的项添加到现有集合中,它不会在每次选择更改时创建新集合。
在触控设备上不能选择多行
问题
用户只能在Ctrl或Shift键的帮助下选择行,它们无法仅通过触摸手势选择多行。
解决方案
要启用对触摸友好的多行选择,将DataControlBase.SelectionMode属性设置为MultiSelectMode.MultipleRow。
如何禁用多行或单元格选择
问题
如果DataControlBase.SelectionMode 属性设置为行或单元格,则启用多选择。
解决方案
如果不启用多选功能,请将DataControlBase.SelectionMode设置为None。
GridControl失去键盘焦点
问题
GridControl在其单元格编辑器关闭时失去键盘焦点,如果GridControl位于容器(如ScrollViewer)内,则可能发生此问题,容器控件可以窃取键盘焦点。
解决方案
禁用容器的Focusable 属性。