我有一个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()方法。你能帮帮我吗?
感谢。
答案 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}"/>