所选选项卡随外部TabControl中模板化的WPF TabControl而更改
我有一个带有外部TabControl的WPF UI,其TabItems包含如下内部TabControl:所选选项卡随外部TabControl中模板化的WPF TabControl而更改,wpf,templates,tabcontrol,Wpf,Templates,Tabcontrol,我有一个带有外部TabControl的WPF UI,其TabItems包含如下内部TabControl: <TabControl> <TabItem Header="Tab1"> <TabControl> <TabItem Header="TabA"> </TabItem> <TabItem Header="TabB">
<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时,内部TabControl会记住它们的选择。示例:选择Tab1,选择TabB,选择Tab2,选择Tab1,您会发现TabB仍然处于选中状态
当我更改TabControl模板时,这种一致性就会崩溃。事实上,当您在外部TabControl上从Tab1移动到Tab2时,内部TabControl上选定的选项卡似乎会随机更改。以下是一些示例模板:
<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>
如何对外部和内部选项卡控件进行模板化,并在内部选项卡控件上保持选定的选项卡状态?您是否尝试过通过ViewModel控制选项卡选择?如果您使用的是ViewModel模式,那么将SelectedItem属性绑定到参考底图属性并在选择更改时进行更新并不十分困难 我以前在ListView中使用过此选项,在运行时更改了ItemTemplates以保护所选项目。我不明白为什么它在这种情况下也不起作用。恐怕这些选项卡控件中的“内部”不容易符合MVVM。这样做比我们完成这个项目所需的时间要长。