Ich habe ein Datagrid in WPF mit einem DataGridTextColum und einem DataGridTemplateColum.Automatische Bearbeitung von WPF Datagrid Inhalt, wenn Datagrid-Zelle den Fokus erhält
<DataGridTextColumn Width="4*" IsReadOnly="True" x:Name="dataGridColumnDescription"
Header="Description" Binding="{Binding Description}">
</DataGridTextColumn>
<DataGridTemplateColumn CellStyle="{StaticResource CellEditing}" IsReadOnly="False" Width="*" Header="Value"
CellEditingTemplateSelector="{StaticResource myCellEditingTemplateSelectorValue}"
CellTemplateSelector="{StaticResource myCellTemplateSelectorValue}">
</DataGridTemplateColumn>
Die CellTemplateSelectors geben einen Datatemplate mit einem Textblock für die die Celltemplate resp. eine TextBox für CellEditing!
<DataTemplate x:Key="dGridStringValueTemplate">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Path=Value}"/>
</DataTemplate>
<DataTemplate x:Key="dGridStringValueTemplateEditing">
<TextBox TextAlignment="Center" VerticalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderThickness="1" Text="{Binding Path=Value, UpdateSourceTrigger=LostFocus}"/>
</DataTemplate>
Jetzt möchte ich automatisch die TextBox Fokus, wenn die Datagridcell den Fokus erhält. Der Benutzer sollte in der Lage sein, den TextBox-Inhalt zu bearbeiten, ohne die Zelle doppelt anzuklicken.
ich diesen Artikel gefunden:
DataGrid Tips & Tricks: Single-Click Editing , wo ich die aktuelle Datagridcell bekommen, aber wie kann ich den Inhalt zugreifen, um die Textbox den Fokus zu geben, um den Inhalt zu bearbeiten?
Das ist mein Stil:
<Style x:Key="CellEditing" TargetType="{x:Type DataGridCell}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="myDataGridMain_PreviewMouseLeftButtonDown"></EventSetter>
</Style>
Das ist mein Event-Handler:
private void myDataGridMain_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DataGridCell cell = sender as DataGridCell; // cell ist not null
DataGridTemplateColumn col = cell.Column as DataGridTemplateColumn; //col is not null
DataTemplate template = col.CellTemplate; //this is null
}
Wie kann ich die Textbox mit dem Event-Handler bekommen?
Wenn Sie Ihr Gitter sein wollen jederzeit bearbeitbar Warum willst du eine Vorlage bearbeiten? fügen Sie einfach Zellschablone mit Textfeld darin hinzu und ändern Sie Art des Textkastens selbst auf diese Weise Sie müssen nicht Fokusmaterial schreiben – WPFKK