1

我有一个绑定到过滤的 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。那么为什么背景没有根据 Style Trigger 而改变呢?我想不通...

4

2 回答 2

1

大概您的转换器返回整数 0 或整数 1?该Tag属性是 type Object,因此 XAML 编译器假定触发器中的“1”值是 a string,而不是int

将转换器更改为返回 a ,或在触发器中string指定一个值:int

<Trigger xmlns:sys="clr-namespace:System;assembly=mscorlib" Property="Tag">
    <Trigger.Value>
        <sys:Int32>1</sys:Int32>
    </Trigger.Value>
</Trigger>
于 2012-06-08T15:05:22.443 回答
0

我认为您的问题是,由于 Tag 是对象类型,因此 1 值被视为字符串,如果您的属性VALIDATED是 int。

正如 msdn 所述,Trigger.Value执行引用相等性检查。而且Object.ReferenceEquals("1", 1)是假的。

如果您将VALIDATED属性修改为字符串,它应该可以正常工作。

于 2012-06-08T15:04:04.867 回答