当WPF DataGrid中的第一行获得焦点时,如何重新对焦它?
本文关键字:焦点 何重新 一行 DataGrid WPF | 更新日期: 2023-09-27 18:13:17
一个简单的问题,目前还没有找到答案。我们的窗口上有一个支持多选择的WPF DataGrid。假设它有10个项目,你选择了第6到第10个项目。如果将选项卡从控件移开,则当控件再次聚焦时,第一项会被聚焦但未被选中。选择仍然停留在第六项到第十项。这对我们来说更糟,因为我们隐藏了焦点矩形,而不是依赖于选择高亮,这是用户期望发生的。
我已经尝试响应IsKeyboardFocusWithinChanged事件,如这里所示,包括有和没有调度程序,计算可能是其他的东西在事实之后改变它,但仍然无济于事。
private void TestDataGrid_IsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if(!(bool)e.NewValue)
return;
Dispatcher.Invoke(new Action(() =>
{
var firstSelectedItem = VariableValuesDataGrid.SelectedItem;
if(firstSelectedItem != null)
VariableValuesDataGrid.CurrentItem = firstSelectedItem;
}), DispatcherPriority.Background);
}
你知道怎么解决这个问题吗?
我不太熟悉WPF DataGrid,但我怀疑你一定在处理旧形式DataGridView的相同问题。
设置选中的行只突出显示,而不实际聚焦它。不幸的是,CurrentRow
属性是私有的,但CurrentCell
属性不是,可以用来设置选择。
myDataGrid.CurrentCell = myDataGrid.Rows[i].Cells[0];
myDataGrid.Rows[i].Selected = True;