Wpf 如何在带有datatemplate的ItemsControl中获得按行制表符顺序?
我希望选项卡向前遍历一行中的每一项,并为每一行执行此操作。但实际上,它会遍历一列中的所有项目,一列接一列 在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.tbWpf 如何在带有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
您已经在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>