0

我在 WPF 中Style为 a定义了一个。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;
}

所以这是一种适用于多个Buttons 的通用样式,每个 s 执行不同的工作。上述事件处理程序是否有可能与单击每个按钮时为每个按钮指定的其他事件处理程序一起运行?

Click如果我为使用此样式的按钮指定处理程序,它是否会覆盖EventSetterEventSetter具有更高的优先级?

4

2 回答 2

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>
于 2016-10-01T11:52:34.373 回答
1

本地值始终优先。

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

于 2016-10-01T15:59:58.587 回答