2011-06-22 18 views
0

我有一個WPF UI具有外的TabControl其的TabItems包含內的TabControls這樣內部與模板WPF的TabControls所選擇的標籤的變化:外的TabControl

<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> 

當從TAB1切換到TAB2在外部的TabControl,內部TabControls記住他們的選擇。例子:選擇Tab1,選擇TabB,選擇Tab2,選擇Tab1,你會發現TabB仍然被選中。

當我更改TabControl模板時,這種一致性分崩離析。實際上,當您從Tab1移動到外部TabControl上的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

您是否試圖通過ViewModel控制選項卡選擇?如果您正在使用ViewModel模式,將SelectedItem屬性綁定到一個內聯屬性以在選擇更改時進行更新並不會太難。

我在運行時更改ItemTemplates以保護選定項目的ListViews上使用過此功能。我不明白爲什麼它在這種情況下也不起作用。

+0

恐怕進入這些選項卡控件的「內部」不容易符合MVVM。這樣做會比我們完成這個項目花費更多的時間。 – Charles