<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>
È un chiaro esempio di colonna Modello, giusto? Cosa potrebbe esserci di sbagliato in questo? Quindi, ecco la cosa: quando un utente naviga attraverso DataGrid premendo TAB-key, deve premere due volte il TAB (!) Per poter modificare il testo in TextBox. Come posso renderlo modificabile non appena l'utente ottiene il focus della colonna, voglio dire anche se inizia a digitare?WPF DataGridTemplateColumn. Mi sto perdendo qualcosa?
Ok. Ho trovato un modo - in Grid.KeyUp() Ho messo il codice qui sotto:
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);
}
}
}
funziona a meraviglia, ma questo è davvero un brutto mod ... :(Vorrei che MS avrebbe trovato un bel modo di fornire questo tipo di funzionalità – David
Il metodo FocusManager funziona bene al fine di ottenere il contenuto selezionato, è possibile anche aggiungere un metodo preso fuoco:. private void StrikeTextBox_GotFocus (object sender, RoutedEventArgs e) { var textBox = (TextBox) mittente ; Dispatcher.BeginInvoke (new Action (textBox.SelectAll)); } – Neil