Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态加载控件上的选项卡顺序_C#_Wpf_Tab Ordering - Fatal编程技术网

C# 动态加载控件上的选项卡顺序

C# 动态加载控件上的选项卡顺序,c#,wpf,tab-ordering,C#,Wpf,Tab Ordering,在这种情况下,我试图为动态加载的控件设置选项卡顺序(tabindex)。主要XAML如下所示: <ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding ItemsDataSource}" Name="overlayItems" ItemTemplate="{StaticResource DetailsTemplate}"> <ItemsControl.ItemsPanel> <ItemsPanel

在这种情况下,我试图为动态加载的控件设置选项卡顺序(tabindex)。主要XAML如下所示:

<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding ItemsDataSource}" Name="overlayItems" ItemTemplate="{StaticResource DetailsTemplate}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
</ItemsControl>
<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>

例如,假设DetailsTemplate是这样简单的:

<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding ItemsDataSource}" Name="overlayItems" ItemTemplate="{StaticResource DetailsTemplate}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
</ItemsControl>
<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>

字段1
字段2
字段3
除了生成的选项卡顺序之外,这个XAML工作得很好


假设ItemsDataSource是一个类的集合,并包含该类的3个实例,则会创建三组DetailsTemplate数据模板。但是,选项卡顺序不会更改,每个field1TextBox都保留在TabIndex 0中。这意味着,该选项卡不是从field1TextBox的第一个实例到field2TextBox再到field3TextBox,而是从field1TextBox的第一个实例到field1TextBox的第二个实例,再到field1TextBox的第三个实例,再到field2TextBox的第一个实例,依此类推。我的问题是,如果数据模板的第二个实例将其文本框选项卡索引分别更新为3、4和5,如何更正选项卡顺序?

您将在MSDN的页面中找到答案。此属性获取或设置设置此属性的元素的子元素的逻辑选项卡导航行为

在used中有几个可能的值以不同的方式影响制表顺序,但是您在使用
Local
值,这会导致制表符索引仅在该容器内的局部子树上考虑,并且。。。[到达边缘时导航离开包含元素]


...

谢谢谢里登。我会检查的。我想确认这对我的解决方案有效。再次感谢!