【发布时间】:2015-03-10 12:20:02
【问题描述】:
我正在通过键盘“Delete”按键使用 WPF DataGrid 行删除。 但是,删除该行后,DataGrid 失去了焦点,DataGrid.SelectedIndex = -1。
相对于WinForm datagrid,删除一行后,焦点自动转移到下一个可聚焦的行,合理得多。
“下一个可聚焦”是指,例如:
Row A
Row B
Row C
If we delete Row A, the next focusable will be Row B.
If we delete Row B, the next focusable will be Row C.
If we delete Row C, the next focusable will be Row B (the last row).
如何在 WPF 数据网格中实现同样的效果?
顺便说一下,下面是一个关注删除后第一行的示例,这并不理想,因为我们希望它成为“下一个可关注的行”。
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.RemovedItems.Count > 0)
{
DataGrid grid = sender as DataGrid;
if (grid.SelectedIndex == -1)
{
grid.SelectedCells.Clear();
grid.SelectedIndex = 0;
}
}
}
有什么想法吗?
谢谢。
【问题讨论】:
-
DataGrid不会失去焦点,删除的行(项目)会。并且要实现 behavior (这不是默认值),您必须做一些工作,例如:禁用删除、手动处理按键、处理Delete键以删除行/行并应用您想要的行为。 -
如何填写您的
DataGrid?是通过绑定它的ItemsSource吗? -
@Sinatr 我无法手动处理,出于某种原因我为删除做了键绑定。
-
@Tomtom,是的,ItemsSource 确实绑定到 ViewModel 中定义的数据,并且 DataGrid 是可编辑的。
-
那么
DataGrid会自动将焦点设置到下一行