我内部有一个DataGrid
和一个可编辑的DataGridComboBoxColumn
列。
我希望将此组合框列的内容水平居中。我尝试了很多东西,发现了许多解决方案,但没有一个能为我工作。然后我想出了this解决方案。 (在ComboBox
内使用DataGridTemplateColumn
)
问题在于,在我的情况下,ComboBox
是可编辑的。因此,当用户按F2
键来编辑ComboBox
单元格的内容时,焦点将不会显示在可编辑的ComboBox
内。然而,鼠标单击该单元格可以正常工作。我假设它显然是因为组合框在模板列类型中。但我希望光标出现在组合框内,当用户在聚焦于该单元格时按F2时,它就变得可编辑。
我该怎么做?
答案 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;
}