【问题标题】:silverlight datagrid multicontrol TemplateColumn TabIndex issuesilverlight datagrid multicontrol TemplateColumn TabIndex问题
【发布时间】:2010-10-04 09:34:29
【问题描述】:

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

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

【问题讨论】:

    标签: datagrid silverlight-4.0 scroll focus


    【解决方案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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      可能,在数据网格单元格中拥有多个控件是个坏主意。如果多个控件需要在单元格内,那么更好的方法似乎是创建自定义复合控件并将其放置在单元格内。

      【讨论】:

        猜你喜欢
        • 2011-09-27
        • 2011-06-17
        • 2011-08-15
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多