2016-03-02 4 views
1

Я не могу найти ответ на свой вопрос где-то. Может быть, вы, ребята, можете мне помочь.WPF TabControl: ItemContainerStyle и ItemTemplateSelector

Я использую WPF и имею TabControl, который использует ItemTemplateSelector. Элемент ItemsSetControl представляет собой ObservableCollection строк. На основе строки выбирается шаблон для TabItem. Пока работает хорошо.

Единственная проблема, с которой я столкнулся сейчас, заключается в том, что я хочу использовать собственный стиль для своих TabItems. Поэтому я попробовал свойство ItemContainerStyle, но это не работает. Когда я устанавливаю ItemContainerStyle, ItemTemplateSelector больше не запускается. Я не использую ContentTemplateSelector, поскольку мне это не нужно в этом решении, так как содержимое вкладок всегда одинаково.

Итак, мой вопрос: как я могу определить стиль TabItems, когда я использую ItemTemplateSelector?

Вот код:

TabControl на UserControl:

<TabControl TabStripPlacement="Right" 
      ItemsSource="{Binding loadedPalettes, UpdateSourceTrigger=PropertyChanged}" 
      Style="{StaticResource StyleTabControl}" 
      ItemTemplateSelector="{StaticResource TabTemplateSelector}" 
      Height="Auto" 
      SelectionChanged="paletteSelectionChanged" 
      SelectedIndex="{Binding selPaletteIndex}" 
      Width="Auto" 
      Margin="0,5,0,0"> 

    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <local:tabDataGrid /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

TemplateSelector Класс

Public Class SSITabTemplateSelector 
    Inherits DataTemplateSelector 

    Public Overrides Function SelectTemplate(item As Object, container As DependencyObject) As DataTemplate 
     Dim element As FrameworkElement 
     element = TryCast(container, FrameworkElement) 

     If element Is Nothing Then Return Nothing 
     If container Is Nothing Then Return Nothing 

     Select Case item 
      Case "Search" 
       Return TryCast(element.FindResource("searchTabItem"), DataTemplate) 
       'Case "TabSwitch" 
       ' Return TryCast(element.FindResource("TextItem"), DataTemplate) 
      Case Else 
       Return TryCast(element.FindResource("normalTabItem"), DataTemplate) 
     End Select 

     Return Nothing 
    End Function 
End Class 

DataTemplates для TabItems

<DataTemplate x:Key="normalTabItem"> 
    <StackPanel Name="Panel" 
       Orientation="Horizontal"> 
     <TextBlock Text="{Binding}" 
        Background="Transparent"> 
      <TextBlock.LayoutTransform> 
       <RotateTransform Angle="270" /> 
      </TextBlock.LayoutTransform> 
     </TextBlock> 

     <ContentPresenter x:Name="ContentSite" 
          VerticalAlignment="Center" 
          HorizontalAlignment="Center" 
          Content="{Binding Content}" /> 
    </StackPanel> 
</DataTemplate> 

<DataTemplate x:Key="searchTabItem"> 
    <StackPanel Name="Panel" 
       Orientation="Horizontal"> 
     <TextBlock Text="blabla" 
        Background="AliceBlue"> 
      <TextBlock.LayoutTransform> 
       <RotateTransform Angle="270" /> 
      </TextBlock.LayoutTransform> 
     </TextBlock> 

     <ContentPresenter x:Name="ContentSite" 
          VerticalAlignment="Center" 
          HorizontalAlignment="Center" 
          Content="{Binding Content}" /> 
    </StackPanel> 
</DataTemplate> 
+0

ли вы пытались добавить в 'TabControl.Resources' стиля'