如何解决为什么我的 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>
但是知道当这个 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种不同的颜色我得到了这个:
他好像只是复制了后面的颜色,没有选择我给的颜色。
解决方法
使用 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 举报,一经查实,本站将立刻删除。