按F2

时间:2017-03-16 07:19:18

标签: wpf xaml combobox

我内部有一个DataGrid和一个可编辑的DataGridComboBoxColumn列。

我希望将此组合框列的内容水平居中。我尝试了很多东西,发现了许多解决方案,但没有一个能为我工作。然后我想出了this解决方案。 (在ComboBox内使用DataGridTemplateColumn

问题在于,在我的情况下,ComboBox是可编辑的。因此,当用户按F2键来编辑ComboBox单元格的内容时,焦点将不会显示在可编辑的ComboBox内。然而,鼠标单击该单元格可以正常工作。我假设它显然是因为组合框在模板列类型中。但我希望光标出现在组合框内,当用户在聚焦于该单元格时按F2时,它就变得可编辑。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以处理PreparingCellForEdit的{​​{1}}事件,在可视树中找到DataGrid并通过调用TextBox方法对其进行关注:

Keyboard.Focus
private void dataGrid_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
    var textBox = GetChildOfType<TextBox>(e.EditingElement);
    if (textBox != null)
        Keyboard.Focus(textBox);
}

private static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
{
    if (depObj == null)
        return null;

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
    {
        var child = VisualTreeHelper.GetChild(depObj, i);

        var result = (child as T) ?? GetChildOfType<T>(child);
        if (result != null) return result;
    }
    return null;
}