Gotfocus и lostfocus on dataGridTextColumn невозможны
У меня есть этот WPF DataGrid:
<DataGrid ItemsSource="{DynamicResource TNMaps}" RowHeaderWidth="0" Width="680" AutoGenerateColumns="False" RowHeight="35" SelectionUnit="Cell" >
<DataGrid.Columns>
<DataGridTextColumn Header="Test Name" Width="2*" Binding="{Binding TestName}" IsReadOnly="True" FontSize="20"/>
<DataGridTextColumn Header="LIS Name" Width="*" Binding="{Binding LISName}" FontSize="20" />
</DataGrid.Columns>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="FontSize" Value="20"/>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
Пользователь может редактировать ячейки в столбце dataGridText с заголовком "Имя LIS". Я попытался установить gotfocus и событие lostfocus для этого datagridTextColumn, но эти события недоступны. Мне нужно сделать это, чтобы я мог отобразить клавиатуру, когда пользователь пытается изменить ячейку в этом столбце (для сенсорных версий).
Есть ли другой способ, как я могу это сделать?
1 ответ
Когда вам требуется более точный контроль над ячейкой по сравнению с ячейкой при редактировании, настройке фокуса и т. Д. Вместо использования DataGridTextColumn, я бы предложил использовать DataGridTemplateColumns и определить ячейки и шаблоны тем ячейки редактирования:
<DataGrid ItemsSource="{DynamicResource TNMaps}" RowHeaderWidth="0" Width="680" AutoGenerateColumns="False" RowHeight="35" SelectionUnit="Cell" >
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding TestName}" GotFocus="OnCellGotFocus"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding TestName}" GotFocus="OnCellInEditGotFocus"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
На месте TextBlock против TextBox, но вы можете делать все, что угодно, и получить полный контроль над визуальным элементом. Вы также можете принудительно заставить сетку войти в режим редактирования и показать шаблон редактирования при выборе строки, нажатии клавиши и т. Д. И т. Д.