我试图设置一个触发器,所以如果两个值匹配发生颜色变化,当匹配的东西是静态的并且可以放在xaml中时很容易,但是当要比较的东西是动态的,如财产。反正基本上是将触发器的值绑定到属性?
示例 - 错误表示值无法使用绑定。这让我认为价值必须是静态的。
<TextBlock Name="MyTextBlock" Text="{Binding someProp}">
<TextBlock.Resources>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyTextBlock, Path=Text}" Value="{Binding someOtherProperty}">
Do some stuff here
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Resources>
</Textblock>
编辑:将其更新为数据触发器,但问题仍然存在。
答案 0 :(得分:3)
为此目的,您可以使用DataTriggers
,如下例所示(TextBlock
名为txtBlock
颜色变化取决于值&#34; R&#34;或&#34 ; N&#34):
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=txtBlock,Path=Text}" Value="R">
<Setter Property="Background" Value="#f9f9f9" />
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=txtBlock,Path=Text}" Value="N">
<Setter Property="Background" Value="Yellow" />
<Setter Property="Foreground" Value="Black" />
</DataTrigger>
</Style.Triggers>
解决方案适用于条件中使用的任何有限数据集。对于更复杂的条件(例如条件块中使用的变量等),您可以在代码隐藏中实现值转换器和绑定,如示例中所示:Binding in WPF DataTrigger value。此外,您可以将MultiDataTrigger
或DataTrigger
与MultiBinding
(re:MultiDataTrigger vs DataTrigger with multibinding)一起考虑。
希望这可能会有所帮助。