代码之家  ›  专栏  ›  技术社区  ›  NickAldwin

DockPanel选项卡顺序

  •  15
  • NickAldwin  · 技术社区  · 16 年前

    我在ItemsControl的DataTemplate中设置了DockPanel,如下所示:

    <ItemsControl HorizontalContentAlignment="Stretch">
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <DockPanel>
            <ComboBox DockPanel.Dock="Left"/>
            <ComboBox DockPanel.Dock="Left"/>
            <Button DockPanel.Dock="Right">Button</Button>
            <!-- This will appear before the button...it has to go after it in the XAML so it will fill properly in the DockPanel -->
            <TextBox DockPanel.Dock="Left" MinWidth="100" HorizontalAlignment="Stretch"/>
          </DockPanel>
        </DataTemplate>
      </ItemsControl.ItemTemplate>
    </ItemsControl>
    

    我试过用 KeyboardNavigation.TabIndex 属性,但由于这是ItemsControl的数据模板(这些dockPanel中的每一个都将用于一个单独的项),这使得制表符顺序从每个项的组合框垂直向下跳转,然后从每个文本框垂直向下跳转,然后从每个按钮垂直向下跳转,而不是通过每行然后向下跳转的所需行为。

    示例用户界面:

    [Combo11] [Combo12] [Text1] [Button1]
    [Combo21] [Combo22] [Text2] [Button2]
    

    Combo11,Combo12,Button1,Text1,Combo21,Combo22,Button2,Text2 . 如果我添加TabOrder属性 Combo11,Combo21,Combo12,Combo22,Text1,Text2,Button1,Button2 .

    我想让它走 Combo11,Combo12,Text1,Button1,Combo21,Combo22,Text2,Button2 .

    3 回复  |  直到 16 年前
        1
  •  8
  •   Goblin    16 年前

    您可以使用网格而不是DockPanel,如下所示:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <ComboBox />
        <ComboBox Grid.Column="1"/>
        <TextBox Grid.Column="2" MinWidth="100" />
        <Button Grid.Column="3">Button</Button>
     </Grid>
    

    如果希望它们在不同的列中很好地对齐,可以使用SharedSizeGroup。

        2
  •  36
  •   Edward    15 年前

    如果要保留DockPanel,可以使用KeyboardNavigation.tab导航=在父dockpanel上设置“Local”,然后可以在其中的控件上设置tab索引值。

    像这样-

        <ItemsControl HorizontalContentAlignment="Stretch">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <DockPanel KeyboardNavigation.TabNavigation="Local">
                        <ComboBox DockPanel.Dock="Left" TabIndex="1"/>
                        <ComboBox DockPanel.Dock="Left" TabIndex="2"/>
                        <Button DockPanel.Dock="Right" TabIndex="4">Button</Button>
                        <!-- This will appear before the button...it has to go after it in the XAML so it will fill properly in the DockPanel -->
                        <TextBox DockPanel.Dock="Left" MinWidth="100" HorizontalAlignment="Stretch" TabIndex="3"/>
                    </DockPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    

        3
  •  -5
  •   Robaticus    16 年前

    你试过显式地设置标签顺序吗?

    <Control KeyboardNavigation.TabIndex="0" />