Nic*_*win 16 wpf user-interface dockpanel tabindex ui-design
我在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>
Run Code Online (Sandbox Code Playgroud)
我希望文本框填充组合框和按钮之间的所有剩余空间.我不得不把文本框放在XAML的最后,因为DockPanel只会填充最后一个孩子.看起来不错; 但是,标签顺序现在搞砸了.它现在选中了combobox-combobox-button-textbox而不是combobox-combobox-textbox-button.
我尝试KeyboardNavigation.TabIndex在每个项目上使用属性,但由于这是ItemsControl的DataTemplate(每个dockpanels将用于单独的项目),这使得Tab键顺序垂直向下跳转到每个项目的组合框,然后垂直向下移动每个文本框,然后垂直向下按下每个按钮,而不是跨越每一行的所需行为,然后向下.
示例UI:
[Combo11] [Combo12] [Text1] [Button1]
[Combo21] [Combo22] [Text2] [Button2]
Run Code Online (Sandbox Code Playgroud)
在目前的情况下,它会发生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问题有任何想法?
Edw*_*ard 32
如果要保留DockPanel,可以在父dockpanel上使用KeyboardNavigation.TabNavigation ="Local",然后可以在其中的控件上设置选项卡索引值.
像这样 -
<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>
Run Code Online (Sandbox Code Playgroud)
正如您所发现的,如果您只是设置控件的选项卡索引值,则这些值对于表单是全局的,因此所有TabIndex ="0"都先选中,然后选中TabIndex ="1",依此类推.在父容器上设置KeyboardNavigation.TabNavigation ="Local"修复它.
您可以使用Grid而不是DockPanel,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
如果您希望它们在不同的列中很好地对齐 - 您可以使用SharedSizeGroup.
| 归档时间: |
|
| 查看次数: |
3827 次 |
| 最近记录: |