无法在dataGridTextColumn上进行焦点和丢失焦点

时间:2013-06-11 07:55:48

标签: wpf wpfdatagrid lost-focus

我有这个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>

用户可以使用Headername“LIS Name”编辑dataGridText列中的单元格。我试图在这个datagridTextColumn上设置一个gotfocus和一个lostfocus事件,但这些事件不可用。 我需要这样做,以便当用户尝试编辑此列中的单元格(触摸版本)时,我可以显示键盘。

我有另外一种方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:3)

如果你需要在编辑,设置焦点等方面对细胞与细胞进行更精细的控制,而不是使用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 vs TextBox中,你可以做任何事情,并获得视觉元素提供的完全控制。您还可以强制网格进入EditMode并在行选择,keydown等上显示编辑模板..等等..