Возможно ли, чтобы EventSetter стиля работал рядом с другим обработчиком событий?

Я определил Style для Button в WPF. В этом стиле я хочу, чтобы фон кнопки менялся при нажатии. Например:

<Style x:Key="TheButton" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Margin" Value="5"/>
    <EventSetter Event="Click" Handler="ChangeBackground"/>
</Style>

и в коде позади:

private void ChangeBackground(object sender, RoutedEventArgs e)
{
    var btn = sender as Button;
    if(btn != null)
        btn.Background = Brushes.SeaShell;
}

Так что это общий стиль, который применяется к нескольким Buttonс, каждый выполняет свою работу. Возможно ли, что описанный выше обработчик событий может работать вместе с другим обработчиком событий, который указывается для каждой кнопки при их нажатии?

Если я укажу Click обработчик для кнопки, которая использует этот стиль, переопределяет EventSetter или EventSetter имеет более высокий приоритет?

2 ответа

Решение

Локальное значение всегда имеет приоритет.

Таким образом, обычный обработчик клика сработает, а затем ваш EventSetter.

Я бы использовал магию XAML для изменения фона (но это дело вкуса). Click Обработчик кнопки работает параллельно.

    <Style TargetType="Button">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Click">
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation To="#FFFF0000" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>
Другие вопросы по тегам