我有一个带有外部TabControl的WPF UI,其TabItems包含内部TabControls,如下所示:
<TabControl>
<TabItem Header="Tab1">
<TabControl>
<TabItem Header="TabA">
</TabItem>
<TabItem Header="TabB">
</TabItem>
</TabControl>
</TabItem>
<TabItem Header="Tab2">
<TabControl>
<TabItem Header="TabC">
</TabItem>
<TabItem Header="TabD">
</TabItem>
</TabControl>
</TabItem>
</TabControl>
在外部TabControl上从Tab1切换到Tab2时,内部TabControls会记住它们的选择。示例:选择Tab1,选择TabB,选择Tab2,选择Tab1,您将发现TabB仍处于选中状态。
当我更改TabControl模板时,这种一致性就会崩溃。事实上,当您从外部TabControl上的Tab1移动到Tab2时,内部TabControls上的选定选项卡似乎随机更改。以下是一些示例模板:
<Window.Resources>
<ControlTemplate x:Key="TabControlTemplate1" TargetType="{x:Type TabControl}">
<DockPanel>
<StackPanel Orientation="Vertical" DockPanel.Dock="Left" IsItemsHost="True"/>
<ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>
</DockPanel>
</ControlTemplate>
<ControlTemplate x:Key="TabControlTemplate2" TargetType="{x:Type TabControl}">
<DockPanel>
<UniformGrid Rows="1" DockPanel.Dock="Top" IsItemsHost="True"/>
<ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>
</DockPanel>
</ControlTemplate>
</Window.Resources>
<TabControl Template="{DynamicResource TabControlTemplate1}">
<TabItem Header="Tab1">
<TabControl Template="{DynamicResource TabControlTemplate2}">
<TabItem Header="TabA">
</TabItem>
<TabItem Header="TabB">
</TabItem>
</TabControl>
</TabItem>
<TabItem Header="Tab2">
<TabControl Template="{DynamicResource TabControlTemplate2}">
<TabItem Header="TabC">
</TabItem>
<TabItem Header="TabD">
</TabItem>
</TabControl>
</TabItem>
</TabControl>
如何模板外部和内部选项卡控件并在内部选项卡控件上维护选定的选项卡状态?
答案 0 :(得分:0)
您是否尝试通过ViewModel控制标签选择?如果您正在使用ViewModel模式,那么将SelectedItem属性绑定到underliying属性以在选择更改时更新它是非常非常困难的。
我之前在ListViews上使用过这个,我在运行时更改了ItemTemplates以保护选定的Item。我不明白为什么它在这种情况下也不起作用。