<data:DataGridTemplateColumn Header="Name">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}">
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}">
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
这是模板列的明显例子,对吧?这可能有什么问题?所以,这就是事情 - 当用户通过点击TAB键导航DataGrid时,它需要点击TAB两次(!)才能编辑TextBox中的文本.一旦用户获得列焦点,我怎么能让它可编辑,我的意思是即使他刚刚开始打字?
好.我找到了一种方法 - 进入Grid.KeyUp()我把代码放在下面:
if (Grid.CurrentColumn.Header.ToString() == "UserName")
{
if (e.Key != Key.Escape)
{
Grid.BeginEdit();
// Simply send another TAB press
if (Keyboard.FocusedElement is Microsoft.Windows.Controls.DataGridCell)
{
var keyEvt = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent };
InputManager.Current.ProcessInput(keyEvt);
}
}
}
Run Code Online (Sandbox Code Playgroud)