如何设置TabItem的标题前景?

时间:2012-04-04 12:37:04

标签: wpf

我有一个TabControl,在其他标签中我有一个叫做“错误”。当名为“ErrorsExist”的某个属性设置为true时,我需要将其标题前景变为红色。这是我的代码:

           <TabControl >
            <TabControl.Resources>
                <conv:ErrorsExistToForegroundColorConverter x:Key="ErrorsExistToForegroundColorConverter"/>

                <Style TargetType="{x:Type TabItem}">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <TextBlock Foreground="{Binding  Path=ErrorsExist, Converter={StaticResource ErrorsExistToForegroundColorConverter}}" Text="{Binding}"/>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TabControl.Resources>

            <TabItem x:Name="ErrorsTab" Header="Errors">

这是我的转换器:

    public class ErrorsExistToForegroundColorConverter: IValueConverter
{

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       switch ((bool)value)
       {
          case true:
             return Brushes.Red;
          case false:
             return Brushes.Black;
          default:
             return Binding.DoNothing;
       }
    }

我有两个问题。

首先,这会将所有标签标题设置为红色,我只需要为ErrorsTab标签执行此操作。

其次,它不起作用。我的意思是,从不调用转换器的Convert()方法。你能帮帮我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

仅将样式分配给您想要更改的TabItem,并更好地使用DataTrigger执行此简单任务:

<TabItem x:Name="ErrorsTab" Header="Errors">
    <TabItem.Style>
      <Style TargetType="{x:Type TabItem}">
        <Style.Triggers>
          <DataTrigger Binding="{Binding ErrorsExist}" Value="True">
              <Setter Property="Foreground" Value="Red"/>
          </DataTrigger>
         </Style.Triggers>
       </Style>
    </TabItem.Style>
  </TabItem>

修改

问题是TabItem标头不继承父TabItem的DataContext。 如果要使用转换器,请手动设置TabHeader DataContext:

          <TextBlock DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}" 
                     Foreground="{Binding ErrorsExist,Converter={StaticResource ErrorsExistToForegroundColorConverter}}" Text="{Binding}"/>