<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>
C'est un exemple clair de colonne Modèle, non? Quest'ce qui pourrait ètre mauvais avec ça? Donc, voici la chose - quand un utilisateur navigue à travers DataGrid en appuyant sur la touche TAB, il doit frapper le TAB deux fois (!) Pour être en mesure de modifier le texte dans TextBox. Comment est-ce que je pourrais le rendre éditable dès que l'utilisateur obtient le focus de la colonne, je veux dire même s'il commence juste à taper?WPF DataGridTemplateColumn. Est-ce que je manque quelque chose?
Ok. J'ai trouvé un moyen - en Grid.KeyUp() Je mets le code ci-dessous:
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);
}
}
}
fonctionne un régal, mais ce qui est vraiment une bidouille horrible ... :(Je souhaite MS trouverait une belle façon de fournir ce type de fonctionnalité – David
La méthode FocusManager fonctionne bien afin d'obtenir le contenu sélectionné, vous pouvez également ajouter une méthode de mise au point a obtenu:. private void StrikeTextBox_GotFocus (expéditeur d'objet, RoutedEventArgs e) { var textBox = (TextBox) expéditeur ; Dispatcher.BeginInvoke (nouvelle Action (textBox.SelectAll)); } – Neil