我在ItemScontrol的数据定位中设置了一个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>

我希望文本框填充组合和按钮之间的所有剩余空间。我不得不将文本框放在XAML中,因为Dockpanel只会填补最后一个孩子。看起来不错;但是,Tab Order现在被搞砸了。现在,它标签了Combobox-Combobox-Button-Textbox,而不是Combobox-Combobox-Textbox-button。

我尝试使用 KeyboardNavigation.TabIndex 每个项目上的属性,但是由于这是一个项目scontrol的数据定位(这些dockpanels中的每一个都将用于一个单独的项目),因此,这使得选项卡订单垂直下降到每个项目的comboboxes,然后垂直降低每个文本框,然后垂直垂直下降。下每个按钮,而不是穿过每一行的所需行为,然后向下。

示例UI:

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

在当前的状态下,它去了 Combo11,Combo12,Button1,Text1,Combo21,Combo22,Button2,Text2. 。如果我添加了栏属性,则 Combo11,Combo21,Combo12,Combo22,Text1,Text2,Button1,Button2.

我想去 Combo11,Combo12,Text1,Button1,Combo21,Combo22,Text2,Button2.

有人对如何解决这个UI问题有任何想法吗?

有帮助吗?

解决方案

您可以使用网格代替码头,就像这样:

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

而且,如果您希望它们在不同的列中很好地对齐 - 您可以使用共享sizeGroup。

其他提示

如果要保留DockPanel,则可以在父码头上使用keyboardNavigation.tabnavigation =“ 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>

正如您发现的那样,如果仅设置控件的选项卡索引值,则它们是全局至表单的,因此所有tabindex =“ 0”都将选项卡放入首先,然后所有tabindex =“ 1”,依此类推。设置键盘Navigation.tabNavigation =“ parent Container”上的“ local”将其修复。

您是否尝试过明确设置标签订单?

<Control KeyboardNavigation.TabIndex="0" />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top