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です。では、なぜスタイルトリガーに基づいて背景が変更されないのですか?わからない...

4

2 に答える 2

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>
于 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 に答える