以下のように、ItemsControlのDataTemplateに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>
コンボボックスとボタンの間の残りのスペースをすべてテキストボックスで埋めたいです。DockPanelは最後の子のみを埋めるため、テキストボックスをXAMLの最後に配置する必要がありました。見栄えがします。ただし、タブの順序はめちゃくちゃになっています。これで、combobox-combobox-textbox-buttonの代わりにcombobox-combobox-button-textboxがタブになります。
各アイテムのプロパティを使用してみKeyboardNavigation.TabIndex
ましたが、これはItemsControlのDataTemplateであるため(これらのドックパネルはそれぞれ個別のアイテム用になります)、タブの順序が各アイテムのコンボボックスを垂直方向にジャンプし、次に各テキストボックスを垂直方向にジャンプします。 、次に各行を横切ってから下に移動するという望ましい動作ではなく、各ボタンを垂直に下に移動します。
UIの例:
[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
です。
このUIの問題を解決する方法について誰かが何かアイデアを持っていますか?