代码之家  ›  专栏  ›  技术社区  ›  synergetic

silverlight datagrid多控件模板列选项卡索引问题

  •  1
  • synergetic  · 技术社区  · 15 年前

    在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>
    

    在编辑模式下,在address1处按Tab键将焦点移动到下一个DataGrid列,而不是address2文本框。如果我将CellTemplate和CellEditingTemplate删除为CellTemplate,那么TabIndex会按预期工作,但是当前列保持不变,因此如果datagrid有很多列,其中一些列是隐藏的,则不会自动滚动。我该怎么解决这个问题?

    2 回复  |  直到 15 年前
        1
  •  1
  •   thomas.st    12 年前

    有点晚了,但我找到了解决这个问题的方法。

    只需将KeyDown事件处理程序添加到CustomControl:

    private void address1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key.Equals(Key.Tab) && address2.IsEnabled)
        {
            address2.Focus();
            e.Handled = true;
        }
    }
    
        2
  •  0
  •   synergetic    15 年前

    推荐文章