<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>
Es un claro ejemplo de columna de plantilla, ¿verdad? Qué podría estar mal con eso? Así que, aquí está la cosa: cuando un usuario navega a través de DataGrid presionando la tecla TAB, necesita presionar la tecla TAB dos veces (!) Para poder editar texto en TextBox. ¿Cómo podría hacerlo editable tan pronto como el usuario obtenga el foco de la columna, es decir, incluso si acaba de comenzar a escribir?WPF DataGridTemplateColumn. ¿Me estoy perdiendo de algo?
Ok. He encontrado una manera - en Grid.KeyUp() pongo el código de abajo:
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);
}
}
}
funciona un tratamiento, pero esto es realmente un truco feo ... :(Deseo MS sería encontrar una buena manera de proporcionar este tipo de funcionalidad – David
El método FocusManager funciona bien el fin de obtener los contenidos seleccionados, también se puede añadir un método tiene el foco:. privada vacío StrikeTextBox_GotFocus (remitente del objeto, RoutedEventArgs e) { var textBox = (Cuadro de texto) emisor ; Dispatcher.BeginInvoke (new Action (textBox.SelectAll)); } – Neil