У меня установлена 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
.
У кого-нибудь есть идеи, как решить эту проблему с пользовательским интерфейсом?