background color change in stackpanel

14,822

Solution 1

You can do that by applying Storyboard on Click event trigger:

<ControlTemplate TargetType="HyperlinkButton">
   <StackPanel Orientation="Horizontal"  Background="#EBEBEB" x:Name="sp1">
      <Image Source="/Assets/Menu/wheretostay.png"  Stretch="None"/>
      <TextBlock />
   </StackPanel>
   <ControlTemplate.Triggers>
     <EventTrigger RoutedEvent="ButtonBase.Click">
        <BeginStoryboard>
          <Storyboard>
            <ColorAnimation To="Green" Storyboard.TargetName="sp1" 
                            Storyboard.TargetProperty="Background.Color"/>
          </Storyboard>
        </BeginStoryboard>
     </EventTrigger>
   </ControlTemplate.Triggers>
 </ControlTemplate>

For Windows Phone 7, use Visual State:

<ControlTemplate TargetType="HyperlinkButton">
   <ControlTemplate.Resources>
     <SolidColorBrush x:Key="PhoneBackgrounBrush" Color="Green"/>
   </ControlTemplate.Resources>
   <StackPanel Orientation="Horizontal" x:Name="sp1">
      <VisualStateManager.VisualStateGroups>
         <VisualStateGroup x:Name="CommonStates">
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="MouseOver"/>
            <VisualState x:Name="Pressed">
               <Storyboard>
                 <ObjectAnimationUsingKeyFrames
                         Storyboard.TargetProperty="Background"
                         Storyboard.TargetName="sp1">
                    <DiscreteObjectKeyFrame KeyTime="0"
                            Value="{StaticResource PhoneBackgrounBrush}"/>
                 </ObjectAnimationUsingKeyFrames>
               </Storyboard>
            </VisualState>
         </VisualStateGroup>
       </VisualStateManager.VisualStateGroups>
       <Image Source="/Assets/Menu/wheretostay.png" Stretch="None"/>
       <TextBlock />
   </StackPanel>
 </ControlTemplate>

Solution 2

Try this

use this name space using System.Windows.Media; and in button click event write this

private void WhereToStayButton_Click(object sender, RoutedEventArgs e)
{
   stackpanelname.Background = new SolidColorBrush(Colors.Red);
}
Share:
14,822
Arun.P
Author by

Arun.P

Updated on June 04, 2022

Comments

  • Arun.P
    Arun.P almost 2 years

    I have stack panel in hyperlink button on button click i have to change stack panel background

                  <HyperlinkButton Name="WhereToStayButton" Margin="0,0,0,0"  Grid.Row="5"  Click="WhereToStayButton_Click">
                <HyperlinkButton.Template>
    
                    <ControlTemplate TargetType="HyperlinkButton">
                        <StackPanel Orientation="Horizontal"   Background="#EBEBEB"     x:Name="sp1">
                            <Image Source="/Assets/Menu/wheretostay.png"   Stretch="None"/>
                            <TextBlock Text="{Binding Path=LocalizedResources.menu_where_stay, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center" Margin="5,10" FontSize="26" Foreground="Black" FontFamily="{StaticResource CustomLucidaGrandStyle}"/>
                        </StackPanel>
                    </ControlTemplate>
                </HyperlinkButton.Template>
            </HyperlinkButton>
    
  • Arun.P
    Arun.P about 10 years
    This is windows phone 8 the error is: In <ControlTemplate.Triggers> "the attachable property Triggers is not recognized or not accessible" plz help me
  • Rohit Vats
    Rohit Vats about 10 years
    You can use VisualStates in Windows Phone 7 like described here. Create Pressed Visual state.
  • Arun.P
    Arun.P about 10 years
    Unable to get stackpanel name in back end as it iss present in template
  • Rashad Valliyengal
    Rashad Valliyengal about 10 years
    check this answer how to access control within template stackoverflow.com/questions/19379946/…
  • Rohit Vats
    Rohit Vats about 10 years
    I have updated the answer for Windows Phone 7. Have a look at it.
  • Arun.P
    Arun.P about 10 years
    Good it works i have to change to original background color when button click is completed.
  • Rohit Vats
    Rohit Vats about 10 years
    In case you want to revert back to original value. Simply add two more Visual States for Normal and MouseOver. I have updated in answer.
  • Naveen Kumar V
    Naveen Kumar V about 6 years
    Worked for me :)