1

一定量のマウス オーバーの後にボタンの色が変わるはずですが、マルチバインドが正しく機能しません。

私のアプリケーションのボタンには、次のスタイルがあります。

    <Style TargetType="Button">
        <EventSetter Event="MouseEnter" Handler="OnMouseEnterButton"/>
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="Content" Value="0"/>
                    <Condition Property="IsMouseOver" Value="False"/>
                </MultiTrigger.Conditions>

                <MultiTrigger.Setters>
                    <Setter Property="Background" Value="Green"/>
                </MultiTrigger.Setters>
            </MultiTrigger>
        </Style.Triggers>
   </Style>

私のボタンは次のようになります。

<Button Name="button1">1</Button>

次のイベント ハンドラーを使用します。

private void OnMouseEnterButton(object sender, RoutedEventArgs e)
{
    ((Button)sender).Content = (int.Parse(((Button)sender).Content.ToString())) + 1;
}

ただし、Button.Content 条件の値が初期値と異なる場合。例:<Condition Property="Content" Value="10"/>トリガーが機能しなくなります。

4

1 に答える 1

2

System.Int32問題は、値 (コードで設定) とSystem.String値 (条件で定義) を比較していることです。

これを修正するには、次の 2 つの方法があります。

1) スタイル条件を次のように変更します。

    <Condition Property="Content">
        <Condition.Value>
            <sys:Int32>10</sys:Int32>
        </Condition.Value>
    </Condition>

名前空間を追加する必要がある場所xmlns:sys="clr-namespace:System;assembly=mscorlib"

またはコードを次のように変更します。

((Button)sender).Content = ((int.Parse(((Button)sender).Content.ToString())) + 1).ToString();
于 2010-11-23T12:34:13.237 に答える