我在某个地方找不到我问题的答案。也许你们能帮我。
我使用的是WPF,它有一个TabControl,它使用ItemTemplateSelector。ItemsSource of TabControl是字符串的ObservableCollection。基于字符串,选择TabItem的模板。到目前为止还不错。
我现在唯一的问题是,我想在我的TabItems上使用自定义样式。所以我尝试了ItemContainerStyle属性,但这不起作用。当我设置ItemContainerStyle时,ItemTemplateSelector不再开火了。我不使用ContentTemplateSelector,因为我不需要这个解决方案,因为Tabs的内容总是一样的。
因此,我的问题是:当我使用?时,如何定义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 ClassDataTemplates用于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>发布于 2016-03-02 08:04:54
补充答案,根据评论。你可以写这样的东西。
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Header" Value="MyHeader"/>
</Style>
</TabControl.Resources>
</TabControl>发布于 2016-03-02 07:21:08
解决方案:
是啊,就这么简单。bars222得到了正确的答案。只需使用<TabControl.Resources>并添加样式。
谢谢!
https://stackoverflow.com/questions/35740478
复制相似问题