Style的EventSetter是否可能与另一个事件处理程序并排运行?

时间:2016-10-01 10:08:57

标签: c# wpf event-handling click eventsetter

我在WPF中为Style定义了Button。在那种风格中,我想要在单击按钮时更改按钮的背景。例如:

<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处理程序,是否会覆盖EventSetterEventSetter具有更高优先级?

2 个答案:

答案 0 :(得分:1)

我会使用一些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>

答案 1 :(得分:1)

Local value always takes precedence.

因此,正常的Click处理程序将触发,然后是EventSetter。