使用相同的样式为每个选项卡设置不同的颜色

时间:2014-02-27 11:53:00

标签: wpf dynamic static resources styles

所以我在Window.Resources中有以下样式:

<Style TargetType="TabItem" x:Key="tiS">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Grid Height="40" Width="186">
                        <Border Name="tiBorder" Background="Transparent">
                            <ContentPresenter ContentSource="Header"
                                              VerticalAlignment="Center"
                                              HorizontalAlignment="Center"
                                              TextBlock.FontSize="20"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Panel.ZIndex" Value="90"/>
                            <Setter TargetName="tiBorder" Property="Background" Value="{DynamicResource tiB}"/>
                            <!--<Setter TargetName="tiBorder" Property="Margin" Value="0,-4,0,-4"/>-->
                            <Setter TargetName="tiBorder" Property="BorderThickness" Value="0,0,0,1"/>
                            <Setter TargetName="tiBorder" Property="BorderBrush" Value="{StaticResource tiLineFade}"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter Property="Panel.ZIndex" Value="80"/>
                            <Setter TargetName="tiBorder" Property="BorderThickness" Value="0,0,0,1"/>
                            <Setter TargetName="tiBorder" Property="BorderBrush" Value="{StaticResource tiLineFade}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

此样式用于5个TabItems,每个TabItems在触发器中由“DynamicResource tiB”给出不同的颜色。

在每个TabItem中,我放置了以下资源(在Window.Resources中设置了Color1):

<TabItem.Resources>
    <SolidColorBrush x:Key="tiB" Color="{StaticResource Color1}"/>
</TabItem.Resources>

我在想,是否有更简单的方法可以做到这一点,还是我做得对?这是我第一次使用WPF中的样式,所以我想做得对。 (这段代码正在运行!为我的情况寻找更好的(如果有)解决方案。)

以下是完整代码:http://pastebin.com/igwxgp6M

1 个答案:

答案 0 :(得分:0)

我相信这会有用

<TabControl ...>
    <TabControl.ItemsContainerStyle>
       <Style TargetType="TabItem">
          //Put triggers here
       </Style>
    <TabControl.ItemsContainerStyle>
</TabControl>