MultiTrigger выполняется только один раз

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

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

    <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 ответ

Решение

Проблема в том, что вы сравниваете 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();
Другие вопросы по тегам