Ho un DockPanel allestito nella DataTemplate di un ItemsControl come di seguito:DockPanel Ordine di tabulazione
<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>
voglio la casella di testo per riempire tutto lo spazio rimanente tra le caselle combinate e il pulsante. Ho dovuto inserire la casella di testo per ultimo nella XAML perché DockPanel riempirà solo l'ultimo figlio. Sembra grandioso; tuttavia, l'ordine di tabulazione è ora rovinato. Ora visualizza combobox-combobox-button-textbox invece di combobox-combobox-textbox-button.
Ho provato utilizzando KeyboardNavigation.TabIndex
proprietà su ogni articolo, ma poiché questo è un DataTemplate per ItemsControl (ciascuno di questi dockpanels sarà un elemento separato), che ha reso l'ordine di tabulazione saltare verticalmente ciascuna comboboxes le voci, quindi verticalmente in basso in ogni casella di testo, quindi verticalmente in basso in ogni pulsante, piuttosto che il comportamento desiderato di attraversare ogni riga, quindi verso il basso.
Esempio UI:
[Combo11] [Combo12] [Text1] [Button1]
[Combo21] [Combo22] [Text2] [Button2]
Allo stato attuale delle cose, va Combo11,Combo12,Button1,Text1,Combo21,Combo22,Button2,Text2
. Se aggiungo proprietà TabOrder, diventa Combo11,Combo21,Combo12,Combo22,Text1,Text2,Button1,Button2
.
Mi piacerebbe andare Combo11,Combo12,Text1,Button1,Combo21,Combo22,Text2,Button2
.
Qualcuno ha qualche idea su come risolvere questo problema di interfaccia utente?
Questo ha funzionato molto bene ... e devo chiedere, perché la prima casella combinata non ha un numero di colonna? Significa che è automaticamente assegnato alla colonna # 0? E grazie un sacco per il suggerimento di SharedSizeGroup - non avrei avuto idea di cosa cercare nemmeno! (p.s. hai dimenticato/in Grid.ColumnDefinitions>) – NickAldwin
Potrebbe avere un Grid.Column = "0" - ma 0 è il valore predefinito - e io sono pigro :-). Sì, SharedSizeGroup è una specie di gemma nascosta. Ho aggiornato il mio esempio per gli altri. – Goblin
Bah, impossibile che SharedSizeGroup funzioni correttamente, probabilmente a causa del ridimensionamento delle stelle nella terza colonna. :( – NickAldwin