我有一种情况,我试图为动态加载的控件设置Tab键顺序(tabindex).主要的XAML看起来像这样:
<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding ItemsDataSource}" Name="overlayItems" ItemTemplate="{StaticResource DetailsTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
例如,假设DetailsTemplate是这样简单的:
<DataTemplate x:Key="DetailsTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="22" />
<RowDefinition Height="22" />
<RowDefinition Height="22" />
</Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0" Padding="0">Field 1</Label>
<TextBox Grid.Column="1" Grid.Row="0" Name="field1TextBox" TabIndex="0" Text="{Binding Field1Value}"/>
<Label Grid.Column="0" Grid.Row="1" Padding="0">Field 2</Label>
<TextBox Grid.Column="1" Grid.Row="1" Name="field2TextBox" TabIndex="1" Text="{Binding Field2Value}"/>
<Label Grid.Column="0" Grid.Row="2" Padding="0">Field 3</Label>
<TextBox Grid.Column="1" Grid.Row="2" Name="field3TextBox" TabIndex="2" Text="{Binding Field3Value}"/>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
除了生成的Tab键顺序之外,此XAML工作正常.
假设ItemsDataSource是类的集合并包含该类的3个实例,则创建三组DetailsTemplate数据模板.但是Tab键顺序没有改变,每个field1TextBox都保留在TabIndex 0.这意味着,而不是从field1TextBox的第一个实例到field2TextBox到field3TextBox的Tab键,选项卡从field1TextBox的第一个实例转到field1TextBox的第二个实例然后到field1TextBox的第三个实例然后到field2TextBox的第一个实例,依此类推.我的问题是,如何更正标签顺序,例如,数据模板的第二个实例将其文本框标签索引分别更新为3,4和5?