在SL4 DataGrid中,我有以下多控制列:
<sdk:DataGridTemplateColumn Header="Address Line1
Address Line 2" MinWidth="200">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Address1}"/>
<TextBlock Text="{Binding Path=Address2}"/>
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel>
<TextBox Background="Transparent" BorderThickness="0"
TabIndex="0"
Text="{Binding Path=Address1, Mode=TwoWay}"/>
<TextBox Background="Transparent" BorderThickness="0"
TabIndex="1"
Text="{Binding Path=Address2, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
在编辑模式下按Tab键,而在地址1处,焦点移动到下一个DataGrid列,但不移动到地址2文本框。如果我将CellTemplate和CellEditingTemplate删除为CellTemplate,则TabIndex按预期工作,但是,当前列保持不变,因此如果datagrid有许多列,其中一些是隐藏的,则不会发生自动滚动。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
有点晚了,但我找到了解决这个问题的方法。
只需将KeyDown EventHandler添加到CustomControl:
private void address1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key.Equals(Key.Tab) && address2.IsEnabled)
{
address2.Focus();
e.Handled = true;
}
}
答案 1 :(得分:0)
可能在datagrid单元格中有多个控件是个坏主意。如果多个控件需要在单元格内,那么更好的方法似乎是创建自定义复合控件并将其放在单元格内。