In this situation, you need to use EventTrigger with the Storyboard because [ Source ]:
EventTrigger - is a trigger that applies a set of actions (animated storyboards) in response to an event.
Example:
<Window.Resources> <SolidColorBrush x:Key="ButtonBrush" Color="OrangeRed" /> <Storyboard x:Key="ChangeBackgroundStoryboard"> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ChangeBackgroundButton" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource ButtonBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </Window.Resources> <Grid> <Grid.Triggers> <EventTrigger SourceName="ChangeBackgroundButton" RoutedEvent="Button.Click"> <BeginStoryboard Storyboard="{StaticResource ChangeBackgroundStoryboard}" /> </EventTrigger> </Grid.Triggers> <Button Name="ChangeBackgroundButton" Content="TestButton" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid>
Here, the Storyboard defined in resources that defines the color of the ButtonBrush that is set in the Click event. For more information see:
MSDN: EventTrigger
Edit
Yes, EventTrigger can be used in the template as follows:
<Window.Resources> <SolidColorBrush x:Key="IsMouseOverBackground" Color="AliceBlue" /> <SolidColorBrush x:Key="IsPressedBrush" Color="Gainsboro" /> <SolidColorBrush x:Key="ButtonBrush" Color="OrangeRed" /> <Storyboard x:Key="ChangeBackgroundStoryboard"> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource ButtonBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> <Style x:Key="FlatButtonBaseStyle" TargetType="{x:Type Button}"> <Setter Property="Width" Value="60" /> <Setter Property="Height" Value="20" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="BorderBrush" Value="Gray" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Border Name="Border" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"> <ContentPresenter Name="Content" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" TextBlock.FontFamily="{TemplateBinding FontFamily}" TextBlock.FontSize="{TemplateBinding FontSize}" /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="Border" Property="Background" Value="{StaticResource IsMouseOverBackground}" /> <Setter Property="Opacity" Value="1" /> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter TargetName="Border" Property="Background" Value="{StaticResource IsPressedBrush}" /> </Trigger> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard Storyboard="{StaticResource ChangeBackgroundStoryboard}" /> </EventTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <WrapPanel> <Button Content="Fisrt" Style="{StaticResource FlatButtonBaseStyle}" Margin="10" /> <Button Content="Second" Style="{StaticResource FlatButtonBaseStyle}" Margin="10" /> <Button Content="Third" Style="{StaticResource FlatButtonBaseStyle}" Margin="10" /> </WrapPanel>
Regarding the ability to contact other buttons through one Storyboard , you can do this:
<Window.Resources> <SolidColorBrush x:Key="ButtonBrush" Color="OrangeRed" /> <SolidColorBrush x:Key="DefaultButtonBrush" Color="BlueViolet" /> </Window.Resources> <WrapPanel> <WrapPanel.Triggers> <EventTrigger SourceName="FisrtButton" RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FisrtButton" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource ButtonBrush}" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SecondButton" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource DefaultButtonBrush}" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ThirdButton" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource DefaultButtonBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </WrapPanel.Triggers> <Button Name="FisrtButton" Content="Fisrt" Margin="10" /> <Button Name="SecondButton" Content="Second" Margin="10" /> <Button Name="ThirdButton" Content="Third" Margin="10" /> </WrapPanel>
In this case, you just need to specify the TargetName for each button, when you click on the first button, the color of the rest of the default changes to BlueViolet :

source share