Wpf 如何在带有datatemplate的ItemsControl中获得按行制表符顺序?

Wpf 如何在带有datatemplate的ItemsControl中获得按行制表符顺序?,wpf,datatemplate,itemscontrol,tabindex,Wpf,Datatemplate,Itemscontrol,Tabindex,我希望选项卡向前遍历一行中的每一项,并为每一行执行此操作。但实际上,它会遍历一列中的所有项目,一列接一列 在DataTemplate中有两个组合框(比如cb1和cb1)和一个文本框(tb)。实际选项卡顺序如下所示: 第0.cb1行, 行1.cb1 ... 第0.cb2行, 第1.cb2行 ... Row0.tb, 行1.tb 但我想要的是: 第0.cb1行, 第0.cb2行, Row0.tb, 第1.cb1行, 第1.cb2行, 行1.tb 您已经在ItemsControl中设置了TabIn

我希望选项卡向前遍历一行中的每一项,并为每一行执行此操作。但实际上,它会遍历一列中的所有项目,一列接一列

在DataTemplate中有两个组合框(比如cb1和cb1)和一个文本框(tb)。实际选项卡顺序如下所示:

第0.cb1行, 行1.cb1 ... 第0.cb2行, 第1.cb2行 ... Row0.tb, 行1.tb

但我想要的是:

第0.cb1行, 第0.cb2行, Row0.tb, 第1.cb1行, 第1.cb2行, 行1.tb


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

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低于第一行的21,第二个组合框wpf将首先循环行,然后再循环列

尝试省去手动设置的TabIndex值!通过这种方式,它使用WPFs自动制表符首先遍历子对象,然后遍历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>

能否请您分享一张图片,说明您试图做些什么来帮助我们了解您的问题?线程移动到:
                        <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>