首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF TabControl: ItemContainerStyle和ItemTemplateSelector

WPF TabControl: ItemContainerStyle和ItemTemplateSelector
EN

Stack Overflow用户
提问于 2016-03-02 06:59:32
回答 2查看 1.1K关注 0票数 1

我在某个地方找不到我问题的答案。也许你们能帮我。

我使用的是WPF,它有一个TabControl,它使用ItemTemplateSelector。ItemsSource of TabControl是字符串的ObservableCollection。基于字符串,选择TabItem的模板。到目前为止还不错。

我现在唯一的问题是,我想在我的TabItems上使用自定义样式。所以我尝试了ItemContainerStyle属性,但这不起作用。当我设置ItemContainerStyle时,ItemTemplateSelector不再开火了。我不使用ContentTemplateSelector,因为我不需要这个解决方案,因为Tabs的内容总是一样的。

因此,我的问题是:当我使用时,如何定义TabItems的样式?

以下是一些代码:

用户控件上的TabControl:

代码语言:javascript
复制
<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类

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-02 08:04:54

补充答案,根据评论。你可以写这样的东西。

代码语言:javascript
复制
<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="MyHeader"/>
        </Style>
    </TabControl.Resources>
</TabControl>
票数 1
EN

Stack Overflow用户

发布于 2016-03-02 07:21:08

解决方案:

是啊,就这么简单。bars222得到了正确的答案。只需使用<TabControl.Resources>并添加样式。

谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35740478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档