MultiTrigger выполняется только один раз - PullRequest
1 голос
/ 23 ноября 2010

Моя кнопка должна менять цвет после определенного количества наведений мыши, однако Мультисвязывание не работает должным образом.

Кнопки в моем приложении имеют следующий стиль:

    <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"/> Триггеры перестают работать.

1 Ответ

2 голосов
/ 23 ноября 2010

Проблема в том, что вы сравниваете значение System.Int32 (заданное в коде) со значением System.String (определенным в условии).

Есть два способа исправить это:

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();
...