2016-03-02 56 views
1

我無法在某處找到我的問題的答案。也許你們可以幫助我。WPF TabControl:ItemContainerStyle和ItemTemplateSelector

我正在使用WPF,並有一個使用ItemTemplateSelector的TabControl。 TabControl的ItemsSource是一個String的ObservableCollection。基於字符串,選擇TabItem的模板。迄今爲止工作良好。

現在唯一的問題是我想在我的TabItems上使用自定義樣式。所以我嘗試了ItemContainerStyle屬性,但這不起作用。當我設置ItemContainerStyle時,ItemTemplateSelector不再觸發。我沒有使用ContentTemplateSelector,因爲我不需要這個解決方案,因爲Tabs的內容總是相同的。

所以我的問題是:當我使用ItemTemplateSelector時,如何定義TabItems的樣式?

下面是一些代碼:

的TabControl上用戶控件:

<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'的風格'<樣式的TargetType =「TabItem的」> ...' – bars222

回答

0

根據評論添加答案。你可以寫這樣的東西。

<TabControl> 
    <TabControl.Resources> 
     <Style TargetType="TabItem"> 
      <Setter Property="Header" Value="MyHeader"/> 
     </Style> 
    </TabControl.Resources> 
</TabControl> 
0

解決方案:

是的,就這麼簡單。酒吧222有正確的答案。只需使用<TabControl.Resources>並添加樣式。

謝謝!

+0

我已經添加了一個答案我的意見,這樣你能接受它,紀念問題回答。 – bars222