更改标签控件样式时出现奇怪的错误

嗨,我为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>

这是一个奇怪的问题,在下面的图片中,您可以看到所选项目的边界颜色保持不变

更改标签控件样式时出现奇怪的错误

什么原因导致此问题发生?

如何解决这个问题?

有没有一种使触发器更简单的方法?

yz1987cn 回答:更改标签控件样式时出现奇怪的错误

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3034752.html

大家都在问