Dockpanel选项卡订单
-
30-09-2019 - |
题
我在ItemScontrol的数据定位中设置了一个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>
我希望文本框填充组合和按钮之间的所有剩余空间。我不得不将文本框放在XAML中,因为Dockpanel只会填补最后一个孩子。看起来不错;但是,Tab Order现在被搞砸了。现在,它标签了Combobox-Combobox-Button-Textbox,而不是Combobox-Combobox-Textbox-button。
我尝试使用 KeyboardNavigation.TabIndex
每个项目上的属性,但是由于这是一个项目scontrol的数据定位(这些dockpanels中的每一个都将用于一个单独的项目),因此,这使得选项卡订单垂直下降到每个项目的comboboxes,然后垂直降低每个文本框,然后垂直垂直下降。下每个按钮,而不是穿过每一行的所需行为,然后向下。
示例UI:
[Combo11] [Combo12] [Text1] [Button1]
[Combo21] [Combo22] [Text2] [Button2]
在当前的状态下,它去了 Combo11,Combo12,Button1,Text1,Combo21,Combo22,Button2,Text2
. 。如果我添加了栏属性,则 Combo11,Combo21,Combo12,Combo22,Text1,Text2,Button1,Button2
.
我想去 Combo11,Combo12,Text1,Button1,Combo21,Combo22,Text2,Button2
.
有人对如何解决这个UI问题有任何想法吗?
解决方案
您可以使用网格代替码头,就像这样:
<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>
而且,如果您希望它们在不同的列中很好地对齐 - 您可以使用共享sizeGroup。
其他提示
如果要保留DockPanel,则可以在父码头上使用keyboardNavigation.tabnavigation =“ local”,然后可以在其内部的控件上设置Tab索引值。
像这样 -
<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”,依此类推。设置键盘Navigation.tabNavigation =“ parent Container”上的“ local”将其修复。
您是否尝试过明确设置标签订单?
<Control KeyboardNavigation.TabIndex="0" />