silverlight datagrid multicontrol TemplateColumn TabIndex问题

时间:2010-10-04 09:34:30

标签: datagrid silverlight-4.0 scroll focus

在SL4 DataGrid中,我有以下多控制列:

<sdk:DataGridTemplateColumn Header="Address Line1&#x0a;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有许多列,其中一些是隐藏的,则不会发生自动滚动。我该怎么做才能解决这个问题?

2 个答案:

答案 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单元格中有多个控件是个坏主意。如果多个控件需要在单元格内,那么更好的方法似乎是创建自定义复合控件并将其放在单元格内。