wpf 堆栈面板中的背景颜色更改

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22004901/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 11:00:49  来源:igfitidea点击:

background color change in stackpanel

wpfwindows-phone-7

提问by Arun.P

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>

采纳答案by Rohit Vats

You can do that by applying Storyboardon Click event trigger:

您可以通过应用StoryboardClick 事件触发器来做到这一点:

<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:

对于 Windows Phone 7,请使用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>

回答by Rashad Annara

Try this

尝试这个

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

使用这个命名空间using System.Windows.Media;并在按钮点击事件中写这个

private void WhereToStayButton_Click(object sender, RoutedEventArgs e)
{
   stackpanelname.Background = new SolidColorBrush(Colors.Red);
}

回答by Sankarann

As Rohit said, Make use of Visual states to achive your requirement..,

正如 Rohit 所说,利用视觉状态来实现您的要求..,

<ControlTemplate TargetType="HyperlinkButton">
    <StackPanel Orientation="Horizontal"  Background="#EBEBEB" x:Name="sp1">
          <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal"/>
                <VisualState x:Name="MouseOver"/>
                <VisualState x:Name="Pressed">
                     <Storyboard>
                              <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="sp1">
                        <EasingColorKeyFrame KeyTime="0" Value="#FFE91818"/>
                                    </ColorAnimationUsingKeyFrames>
                     </Storyboard>
                </VisualState>
                <VisualState x:Name="Disabled"/>
            </VisualStateGroup>
         </VisualStateManager.VisualStateGroups>
       <Image Source="/Assets/Menu/wheretostay.png"  Stretch="None"/>
       <TextBlock />
   </StackPanel>
</ControlTemplate>