Ho un DataGrid in WPF con un DataGridTextColum e DataGridTemplateColum.Montaggio automatico dei contenuti datagrid WPF quando datagrid celle si concentrerà
<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>
Le CellTemplateSelectors restituiscono un DataTemplate con un TextBlock per il resp il CellTemplate. un TextBox per 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>
Ora voglio concentrarmi automaticamente il TextBox quando la DataGridCell ottiene la messa a fuoco. L'utente dovrebbe essere in grado di modificare il contenuto del TextBox senza fare doppio clic sulla cella.
Ho trovato questo articolo:
DataGrid Tips & Tricks: Single-Click Editing dove posso trovare il DataGridCell corrente, ma come posso accedere al contenuto della casella di testo per dare il focus per modificare il contenuto?
Questo è il mio stile:
<Style x:Key="CellEditing" TargetType="{x:Type DataGridCell}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="myDataGridMain_PreviewMouseLeftButtonDown"></EventSetter>
</Style>
Questo è il mio gestore di eventi:
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
}
Come posso ottenere la casella di testo con quel gestore di eventi?
Quando si desidera la griglia di essere modificabile tutto il tempo perché vuoi modificare il modello? aggiungi semplicemente il modello di cella con la casella di testo e cambia lo stile della casella di testo stessa in questo modo non devi scrivere elementi di messa a fuoco – WPFKK