[英]WPF TabControl: ItemContainerStyle and ItemTemplateSelector
我在某处找不到问题的答案。 也许你们可以帮助我。
我正在使用WPF,并且具有使用ItemTemplateSelector的TabControl。 TabControl的ItemsSource是字符串的ObservableCollection。 根据字符串,选择TabItem的模板。 到目前为止工作正常。
我现在唯一的问题是我想在TabItems上使用自定义样式。 因此,我尝试了ItemContainerStyle属性,但这不起作用。 当我设置ItemContainerStyle时,ItemTemplateSelector不再触发。 我没有使用ContentTemplateSelector,因为此选项卡的内容始终相同,因此在此解决方案上不需要此模板。
所以我的问题是:当我使用ItemTemplateSelector时,如何定义TabItem的样式?
这是一些代码:
用户控件上的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的数据模板
<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>
解:
是的,就是这么简单。 bars222的回答正确。 只需使用<TabControl.Resources>
并添加样式即可。
谢谢!
根据评论添加答案。 您可以这样写。
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Header" Value="MyHeader"/>
</Style>
</TabControl.Resources>
</TabControl>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.