我无法在某处找到我的问题的答案 . 也许你们可以帮助我 .
我正在使用WPF并使用TabControl,它使用ItemTemplateSelector . TabControl的ItemsSource是一个ObservableCollection字符串 . 根据字符串,选择TabItem的模板 . 到目前为止工作正常 .
我现在唯一的问题是,我想在我的TabItems上使用自定义样式 . 所以我尝试了ItemContainerStyle属性,但这不起作用 . 当我设置ItemContainerStyle时,ItemTemplateSelector不再触发 . 我没有使用ContentTemplateSelector,因为我在这个解决方案上不需要这个,因为Tabs的内容总是相同的 .
So my question is: How can I define the style of the TabItems, when I use an ItemTemplateSelector?
这是一些代码:
UserControl上的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
TabItems的DataTemplates
<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>
2 回答
根据评论添加答案 . 你可以写这样的东西 .
Solution:
是的,就这么简单 . bars222得到了正确的答案 . 只需使用
<TabControl.Resources>
并添加样式 .谢谢!