2010-01-22 16 views
0

我希望标签通过一行中的每个项目前进,而每个项目都是这样。但实际上,它会经过一列,列之后的所有项目!如何在具有datatemplate的ItemsControl中获得明智的行选项卡顺序?

在DataTemplate中有2个组合框(比方说cb1和cb1)和一个TextBox(tb)。实际的选项卡顺序如下:

Row0.cb1, Row1.cb1 ... Row0.cb2, Row1.cb2 ... Row0.tb, Row1.tb ...

但我想要的是:

Row0.cb1, Row0.cb2, Row0.tb, Row1.cb1, Row1.cb2, Row1.tb ...

      <ItemsControl ItemsSource="{Binding}" Name="myItemsControl"> 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <Grid> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="3*"/> 
               <ColumnDefinition Width="*"/> 
               <ColumnDefinition Width="Auto"/> 
              </Grid.ColumnDefinitions> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="Auto"/> 
              </Grid.RowDefinitions> 
              <ComboBox Grid.Column="0" ItemsSource="{Binding Source={StaticResource SomeItems}}" IsSynchronizedWithCurrentItem="False" SelectedItem="{Binding Path=SomeValue, Mode=TwoWay}" DisplayMemberPath="Name" TabIndex="20"/> 
              <ComboBox Grid.Column="1" ItemsSource="{Binding Source={StaticResource SomeOtherItems}}" IsSynchronizedWithCurrentItem="False" SelectedItem="{Binding Path=SomeOtherValue, Mode=TwoWay}" DisplayMemberPath="Value" TabIndex="21"/> 
              <TextBox HorizontalContentAlignment="Stretch" Grid.Column="2" TabIndex="22" LostKeyboardFocus="TextBox_FormatAfterLostFocus"> 
               <TextBox.Text> 
                <Binding Path="Wert" Mode="TwoWay" /> 
               </TextBox.Text> 
              </TextBox> 
             </Grid> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
+0

可否请你分享你试图做些什么来帮助我们理解你的问题是什么画面? – japf 2010-01-22 10:27:06

+0

主题转移到:http://stackoverflow.com/questions/2116802/wpf-tabstop-tabindex-in-itemscontrol – nilnitzer 2010-01-22 11:15:36

回答

-1

您已经在ItemsControl中设置了TabIndex值。 WPF所做的是给每一行提供相同的TabIndices,这意味着:

row1.cb1.TabIndex = 20 | row1.cb2.TabIndex = 21 | row1.tb.TabIndex = 22
row2.cb1.TabIndex = 20 | row2.cb2.TabIndex = 21 | row2.tb.TabIndex = 22

由于第二行的20低于第一行的第二行,所以第二个组合框wpf将在循环访问列之前先循环行。

尝试省略手动设置的TabIndex值!这样,它使用WPF自动标签来循环首先通过孩子,然后通过XAML的兄弟。

像这样:

     <ItemsControl ItemsSource="{Binding}" Name="myItemsControl"> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="3*"/> 
              <ColumnDefinition Width="*"/> 
              <ColumnDefinition Width="Auto"/> 
             </Grid.ColumnDefinitions> 
             <Grid.RowDefinitions> 
              <RowDefinition Height="Auto"/> 
             </Grid.RowDefinitions> 
             <ComboBox Grid.Column="0" ItemsSource="{Binding Source={StaticResource SomeItems}}" IsSynchronizedWithCurrentItem="False" SelectedItem="{Binding Path=SomeValue, Mode=TwoWay}" DisplayMemberPath="Name"/> 
             <ComboBox Grid.Column="1" ItemsSource="{Binding Source={StaticResource SomeOtherItems}}" IsSynchronizedWithCurrentItem="False" SelectedItem="{Binding Path=SomeOtherValue, Mode=TwoWay}" DisplayMemberPath="Value"/> 
             <TextBox HorizontalContentAlignment="Stretch" Grid.Column="2" LostKeyboardFocus="TextBox_FormatAfterLostFocus"> 
              <TextBox.Text> 
               <Binding Path="Wert" Mode="TwoWay" /> 
              </TextBox.Text> 
             </TextBox> 
            </Grid> 
           </DataTemplate> 
          </ItemsControl.ItemTemplate> 
         </ItemsControl> 
+0

什么是-1? – 2012-09-20 13:56:57

相关问题