为什么我的 Tabcontrol 的 MultiDataTrigger 事件不起作用?

问题描述

所以我得到了一个 Tabcontrol 并且我有一个“IsSelected”触发器来改变颜色,现在我想将它绑定到一个 ToggleButton 上。为此我需要两个触发器,那是因为我制作了一个 multidatatrigger。起初我的 TabItem Styl 看起来像这样:

 <Style targettype="TabItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate targettype="TabItem">
                                    <Border Name="Border" BorderThickness="1,1,0" BorderBrush="Gainsboro" CornerRadius="4,4,0" Margin="2,0">
                                        <ContentPresenter x:Name="ContentSite"
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Center"
                                    ContentSource="Header"
                                    Margin="10,2"/>
                                    </Border>
                                    <ControlTemplate.Triggers>
                                        
                                        <Trigger Property="IsSelected" Value="True">
                                            <Setter TargetName="Border" Property="Background" Value="#0078D7" />
                                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                                            <Setter Property="Foreground" Value="#D4D4E1"/>
                                        </Trigger>
                                        <Trigger Property="IsSelected" Value="False">
                                            <Setter TargetName="Border" Property="Background" Value="#CCCCCC" />
                                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                                            <Setter Property="Foreground" Value="Black"/>
                                        </Trigger>

                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>

看起来像这样:

Picture1

但是知道当这个 ToggleButton 被激活时我想要两种不同的颜色,那是因为我把它改成了这个

<Style targettype="TabItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate targettype="TabItem">
                                    <Border Name="Border" BorderThickness="1,2"/>
                                    </Border>
                                    <ControlTemplate.Triggers>
                                        <multidatatrigger >
                                            <multidatatrigger.Conditions>
                                                <Condition Binding="{Binding Path=IsChecked,ElementName=ToggleSwitch}" Value="True"/>
                                                <Condition Binding="{Binding Path=IsSelected}" Value="True"/>
                                            </multidatatrigger.Conditions>

                                            <Setter TargetName="Border" Property="Background" Value="#0078D7" />
                                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                                            <Setter Property="Foreground" Value="#D4D4E1"/>
                                        </multidatatrigger>
                                        <multidatatrigger >
                                            <multidatatrigger.Conditions>
                                                <Condition Binding="{Binding Path=IsChecked,ElementName=ToggleSwitch}" Value="False"/>
                                                <Condition Binding="{Binding Path=IsSelected}" Value="True"/>
                                            </multidatatrigger.Conditions>
                                            <Setter TargetName="Border" Property="Background" Value="#CCCCCC" />
                                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                                            <Setter Property="Foreground" Value="Black"/>
                                        </multidatatrigger>
                                        <!--<Trigger Property="IsSelected" Value="True">
                                            <Setter TargetName="Border" Property="Background" Value="#0078D7" />
                                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                                            <Setter Property="Foreground" Value="#D4D4E1"/>
                                        </Trigger>
                                        <Trigger Property="IsSelected" Value="False">
                                            <Setter TargetName="Border" Property="Background" Value="#CCCCCC" />
                                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                                            <Setter Property="Foreground" Value="Black"/>
                                        </Trigger>-->

                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>

但是当检查ToggleButton时,我有2种不同的颜色我得到了这个:

Picture2

当我点击那个 ToggleButton 时,我得到了这个:

Picture3

他好像只是复制了后面的颜色,没有选择我给的颜色。

解决方法

使用 ElementName 属性绑定到不在同一个 namescope 中的元素根本行不通。

您应该做的是将 ToggleButton 绑定到视图模型的源属性,然后绑定到模板中的相同源属性:

<ToggleButton IsChecked="{Binding IsToggleChecked}" ... />
<TabControl ....>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding IsToggleChecked}" Value="True"/>
        <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource Self}}" Value="True"/>
    </MultiDataTrigger.Conditions>
    ...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...