我有这个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事件,但这些事件不可用。 我需要这样做,以便当用户尝试编辑此列中的单元格(触摸版本)时,我可以显示键盘。
我有另外一种方法可以做到这一点吗?
答案 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等上显示编辑模板..等等..