我無法在某處找到我的問題的答案。也許你們可以幫助我。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>
你有沒有嘗試過加入到'TabControl.Resources'的風格'<樣式的TargetType =「TabItem的」> ...' – bars222