当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中的第一行获得焦点时,如何重新对焦它?

我不太熟悉WPF DataGrid,但我怀疑你一定在处理旧形式DataGridView的相同问题。

设置选中的行只突出显示,而不实际聚焦它。不幸的是,CurrentRow属性是私有的,但CurrentCell属性不是,可以用来设置选择。

myDataGrid.CurrentCell = myDataGrid.Rows[i].Cells[0];
myDataGrid.Rows[i].Selected = True;