Как я могу получить порядок расположения строк в ItemsControl с табличкой данных? - PullRequest
0 голосов
/ 22 января 2010

Я хочу, чтобы вкладка проходила по каждому пункту подряд, и это для каждой строки. Но на самом деле он проходит через все элементы в столбце, столбец за столбцом!

В 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>

1 Ответ

0 голосов
/ 23 января 2010

вы установили значения TabIndex в ItemsControl. WPF присваивает каждой строке одинаковые TabIndices, это означает:

row1.cb1.TabIndex = 20 | row1.cb2.TabIndex = 21 | row1.tb.TabIndex = 22 * ​​1003 * row2.cb1.TabIndex = 20 | row2.cb2.TabIndex = 21 | row2.tb.TabIndex = 22 * ​​1004 *

, так как 20 второго ряда меньше 21 первого ряда, второй выпадающий список 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>
...