当它获得焦点时,如何重新聚焦WPF DataGrid中的第一个选定行?

时间:2015-09-17 23:11:05

标签: c# wpf datagrid .net-4.0

一个简单的问题,一个尚未解决的答案。我们的窗口上有一个支持多选的WPF DataGrid。假设它有10个项目,你选择了6到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);
}

知道怎么解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我对WPF DataGrid并不熟悉,但我怀疑你必须处理旧表格DataGridView的相同问题。

仅选择设置所选行的高亮显示并且实际上不会对其进行聚焦。并且CurrentRow属性不幸是私有的,但CurrentCell属性不是,可以用来设置选择。

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