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, но вы можете делать все, что угодно, и получить полный контроль над визуальным элементом. Вы также можете принудительно заставить сетку войти в режим редактирования и показать шаблон редактирования при выборе строки, нажатии клавиши и т. Д. И т. Д.

Другие вопросы по тегам