StackPanel中背景颜色的更改

4
我有一个堆栈面板在超链接按钮中,当我点击按钮时,我需要更改堆栈面板的背景。
              <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>
3个回答

7

试试这个

使用这个命名空间 using System.Windows.Media;,在按钮单击事件中编写以下内容

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

无法在后端获取StackPanel名称,因为它存在于模板中。 - Arun.P
查看此答案以了解如何从代码后台访问数据模板中的控件 https://dev59.com/D3fZa4cB1Zd3GeqPYf17 - Rashad Valliyengal
对我有用 :) - Naveen Kumar V

2
你可以通过在点击事件触发器上应用故事板(Storyboard)来实现这一点。
<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>

对于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>

这是 Windows Phone 8,错误为:“在<ControlTemplate.Triggers>中,“可附加属性Triggers”未被识别或无法访问”。请帮帮我。 - Arun.P
你可以像这里所描述的那样,在Windows Phone 7中使用VisualStates。创建按下的可视状态。 - Rohit Vats
我已更新了Windows Phone 7的答案。请查看它。 - Rohit Vats
好的,它可以工作了。当按钮点击完成后,我必须更改为原始背景颜色。 - Arun.P
如果您想要恢复到原始值,只需为“Normal”和“MouseOver”添加两个更多的可视状态。我已在答案中进行了更新。 - Rohit Vats

0

正如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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接