У меня есть DockPanel установить в DataTemplate в качестве ItemsControl, как показано ниже:DockPanel Tab Order
<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.
Я попытался использовать свойства 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
.
Есть ли у кого-нибудь идеи по решению этой проблемы пользовательского интерфейса?
Это сработало очень хорошо ... и я должен спросить, почему первый combobox не имеет номера столбца? Означает ли это, что он автоматически присваивается столбцу № 0? И спасибо за кучу совета SharedSizeGroup - я бы не знал, что даже искать! (стр. вы забыли/в Grid.ColumnDefinitions>) – NickAldwin
Он может иметь Grid.Column = "0", но 0 - значение по умолчанию - и я ленивый :-). Да, SharedSizeGroup - это своего рода скрытый камень. Я обновил свой пример для других. – Goblin
Бах, не смог заставить SharedSizeGroup работать правильно - вероятно, из-за размера звезды в третьем столбце. :( – NickAldwin