2010-01-22 2 views
0

Tab을 한 행의 각 항목으로 이동시키고 각 행마다이 탭을 앞으로 이동 시키길 원합니다. 그러나 실제로는 열의 모든 항목, 열 다음의 항목을 통과합니다!데이터 템플릿이있는 ItemsControl에서 행 현명한 탭 순서를 얻으려면 어떻게해야합니까?

DataTemplate에는 2 개의 Comboboxes (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

+0

스레드가 옮겼습니다 : http://stackoverflow.com/questions/2116802/wpf-tabstop-tabindex-in-itemscontrol – nilnitzer

답변

-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 개가 첫 번째 행 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> 
+0

무엇이 -1입니까? –

관련 문제