微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么我的 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>
    ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?