【发布时间】:2011-04-02 18:09:26
【问题描述】:
我在 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>
我希望文本框填充组合框和按钮之间的所有剩余空间。我不得不将文本框放在 XAML 中的最后,因为 DockPanel 只会填充最后一个孩子。看起来不错;但是,标签顺序现在搞砸了。它现在选项卡 combobox-combobox-button-textbox 而不是 combobox-combobox-textbox-button。
我尝试在每个项目上使用KeyboardNavigation.TabIndex 属性,但由于这是 ItemsControl 的 DataTemplate(每个停靠面板都将用于单独的项目),这使得选项卡顺序垂直向下跳到每个项目的组合框,然后垂直向下每个文本框,然后垂直向下每个按钮,而不是遍历每一行,然后向下的期望行为。
用户界面示例:
[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 问题有任何想法吗?
【问题讨论】:
标签: wpf user-interface tabindex ui-design dockpanel