Порядок вкладок DockPanel

У меня есть DockPanel, настроенный в DataTemplate ItemsControl, как показано ниже:

<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 будет заполнять только последний дочерний элемент. Это здорово выглядит; однако порядок вкладок теперь облажался. Теперь он содержит вкладки combobox-combobox-button-textbox вместо combobox-combobox-textbox-button.

Я пытался использовать свойства KeyboardNavigation.TabIndex для каждого элемента, но так как это DataTemplate для ItemsControl ( каждая из этих док-панелей будет предназначена для отдельного элемента), в результате чего порядок вкладок перемещался вертикально вниз по каждому из списков элементов, затем вертикально вниз к каждому текстовому полю, а затем вертикально вниз к каждой кнопке, а не к желаемому поведению перехода по каждой строке, затем вниз.

Пример пользовательского интерфейса:

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

У кого-нибудь есть идеи, как решить эту проблему с пользовательским интерфейсом?

16
задан NickAldwin 23 August 2010 в 16:39
поделиться

2 ответа

Вы можете использовать Grid вместо 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.

8
ответ дан 30 November 2019 в 16:57
поделиться

Вы пробовали явно установить порядок табуляции?

<Control KeyboardNavigation.TabIndex="0" />
-5
ответ дан 30 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: