嗨,我为Tabcontrol编写了一种样式 一切正常,现在我希望选项卡项目的颜色为灰色,但在选择时变为黑色
以下代码显示了样式运作良好的稳定状态 当此值为true时,我创建了一个名为IsUWPStyle的属性,我通过更改BorderThickness和其他一些属性来更改样式,因此我编写了一些触发器
<Style TargetType="controls:TabItem">
<Setter Property="Foreground" Value="{Dynamicresource PrimaryTextBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:TabItem">
...
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding Path=IsUWPStyle,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Panel.ZIndex" Value="1"/>
<Setter Property="Opacity" TargetName="innerBorder" Value="1"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<DataTrigger Binding="{Binding Path=IsUWPStyle,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="True">
<Setter TargetName="innerBorder" Property="Opacity" Value="1"/>
<Setter Property="Panel.ZIndex" Value="1"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Panel.ZIndex" Value="1"/>
<Setter Property="Opacity" TargetName="innerBorder" Value="0"/>
<Setter Property="BorderThickness" Value="0,3,0"/>
<Setter Property="BorderBrush" Value="{Binding Path=TabItemHeaderBrush,RelativeSource={RelativeSource AncestorType=controls:TabControl}}"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Effect" Value="{StaticResource EffectShadow3}"/>
<Setter Property="Opacity" TargetName="innerBorder" Value="0"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsUWPStyle,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="False">
<Setter Property="BorderThickness" Value="1,1,1"/>
</DataTrigger>
</Style.Triggers>
</Style>
现在我要进行这些更改
我将以下触发器添加到<Style.Triggers>
部分中,以将所有项目的颜色更改为灰色
<DataTrigger Binding="{Binding Path=IsUWPStyle,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="True">
<Setter Property="Foreground" Value="{Dynamicresource SecondaryTextBrush}"/>
</DataTrigger>
现在,如果鼠标悬停在项目上,我将编写另一个触发器以将项目的颜色更改为黑色。
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding Path=IsUWPStyle,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Foreground" Value="{Dynamicresource PrimaryTextBrush}"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
现在,当选中该项目时,它也应该变为黑色,所以我将添加以下触发器
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=controls:TabControl}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Foreground" Value="{Dynamicresource PrimaryTextBrush}"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
这是一个奇怪的问题,在下面的图片中,您可以看到所选项目的边界颜色保持不变
什么原因导致此问题发生?
如何解决这个问题?
有没有一种使触发器更简单的方法?