DockPanel Tab Заказать - PullRequest
       9

DockPanel Tab Заказать

15 голосов
/ 23 августа 2010

У меня установлена ​​DockPanel в шаблоне данных элемента 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-textbox-button» вкладки «combobox-combobox-button-text».

Я пытался использовать свойства 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.

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

Ответы [ 3 ]

31 голосов
/ 26 января 2011

Если вы хотите сохранить DockPanel, вы можете использовать KeyboardNavigation.TabNavigation = "Local" на родительской панели подключения, а затем вы МОЖЕТЕ установить значения индекса вкладки для элементов управления внутри него.

Как это -

    <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" и так далее.Set KeyboardNavigation.TabNavigation = "Local" в родительском контейнере исправляет это.

7 голосов
/ 23 августа 2010

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

0 голосов
/ 23 августа 2010

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

<Control KeyboardNavigation.TabIndex="0" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...