我有一个绑定到过滤后的DataView的按钮(总是1条记录):
<Button x:Name="btnValidate" Grid.Row="0" Grid.RowSpan="2" Grid.Column="3" Cursor="Hand" Click="btnValidate_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="{StaticResource ValidationNoneBrush}" />
<Setter Property="Tag" Value="{Binding VALIDATED, Converter={StaticResource DebugConverter}}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border x:Name="bdrValidate" Background="{TemplateBinding Background}">
<Image Source="../Images/24/LocationSearch.png" Stretch="None" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Tag" Value="1">
<Setter Property="Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
正如您所看到的,我有一个用于调试的转换器,它工作正常。我看到通过转换器的值是0和1。那么为什么背景不会根据样式触发器而改变?我无法弄明白......
答案 0 :(得分:1)
大概你的转换器返回整数0或整数1? Tag
属性的类型为Object
,因此XAML编译器假定触发器中的“1”值为string
,而不是int
更改转换器以返回string
,或在触发器中指定int
值:
<Trigger xmlns:sys="clr-namespace:System;assembly=mscorlib" Property="Tag">
<Trigger.Value>
<sys:Int32>1</sys:Int32>
</Trigger.Value>
</Trigger>
答案 1 :(得分:0)
我认为您的问题是,由于Tag属于对象类型,因此1个值被视为字符串,以防您的属性VALIDATED
为int。
正如msdn所述,Trigger.Value会进行reference equality检查。
Object.ReferenceEquals("1", 1)
是假的。
如果您将VALIDATED
属性修改为字符串,则它应该可以正常工作。