首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DockPanel Tab键顺序

DockPanel Tab键顺序
EN

Stack Overflow用户
提问于 2010-08-24 00:39:38
回答 3查看 4.3K关注 0票数 18

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

代码语言:javascript
复制
<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>

我希望文本框填满组合框和按钮之间的所有剩余空间。我必须将textbox放在XAML的最后,因为DockPanel只填充最后一个子元素。它看起来很棒;但是,Tab键顺序现在搞砸了。它现在的标签是combobox-combobox-button-textbox,而不是combobox-combobox-textbox-button。

我尝试在每个项目上使用KeyboardNavigation.TabIndex属性,但由于这是一个ItemsControl的DataTemplate (每个停靠面板将用于一个单独的项目),这使得Tab键顺序垂直向下跳到每个项目的组合框,然后垂直向下每个文本框,然后垂直向下每个按钮,而不是所需的行为,即遍历每一行,然后向下。

示例UI:

代码语言:javascript
复制
[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

有谁对如何解决这个UI问题有什么想法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-24 02:02:37

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

代码语言:javascript
复制
<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。

票数 8
EN

Stack Overflow用户

发布于 2011-01-27 03:08:51

如果想要保留DockPanel,可以在父级停靠面板上使用KeyboardNavigation.TabNavigation="Local“,然后可以在其中的控件上设置选项卡索引值。

就像这样-

代码语言:javascript
复制
    <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>

正如您所发现的,如果您只是设置控件的制表符索引值,这些值对于表单是全局的,因此所有的TabIndex="0“都会先用Tab键切换到,然后是所有的TabIndex="1",依此类推。在父容器上设置KeyboardNavigation.TabNavigation=“本地”可以修复它。

票数 36
EN

Stack Overflow用户

发布于 2010-08-24 00:46:08

您是否尝试过显式设置Tab键顺序?

代码语言:javascript
复制
<Control KeyboardNavigation.TabIndex="0" />
票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3549678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档