0

我有 2 个触发事件,都带有 an<Trigger.EnterActions>和 a <Trigger.ExitActions>,这些是IsPressedand also IsMouseOver

当我单击一个按钮时,它将播放<Trigger Property="IsPressed" Value="True">故事板:

<Trigger Property="IsPressed" Value="True">
   <Trigger.EnterActions>
       <BeginStoryboard Storyboard="{StaticResource MouseDownTimeLine}"/>
   </Trigger.EnterActions>
   <Trigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource MouseUpTimeLine}"/>
   </Trigger.ExitActions>
 </Trigger>

这与这个故事板相关联:

<Storyboard x:Key="MouseDownTimeLine" >
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Pressed" Storyboard.TargetProperty="Opacity" >
        <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="1" />
     </DoubleAnimationUsingKeyFrames>
</Storyboard>

<Storyboard x:Key="MouseUpTimeLine">
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Pressed" Storyboard.TargetProperty="Opacity" >
        <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="1"/>
     </DoubleAnimationUsingKeyFrames>
</Storyboard>

不同的按钮也链接到同一个故事板。单击第二个按钮时,我希望它按原样播放情节提要,然后让第一个按钮返回正常状态。这是故事板的这一部分。

<Storyboard x:Key="MouseExitTimeLine">
     <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Normal" Storyboard.TargetProperty="Opacity" >
          <SplineDoubleKeyFrame KeyTime="00:00:00.00" Value="1"/>
     </DoubleAnimationUsingKeyFrames>

      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Hover" Storyboard.TargetProperty="Opacity" >
           <SplineDoubleKeyFrame KeyTime="00:00:00.00" Value="0"/>
       </DoubleAnimationUsingKeyFrames>
</Storyboard>

单击第二个按钮时,如何触发第一个按钮重置为正常

4

1 回答 1

1

也许我在这里错了,但似乎您已将单选按钮功能嵌入到按钮模板中。当您单击一个按钮时,它会保持“已单击”(或选中)状态,而当您单击另一个按钮时,它会“释放”第一个按钮的单击。

我将模板的目标类型更改为RadioButton,触发器更改为:

<Trigger Property="IsChecked" Value="True">
   <Trigger.EnterActions>
       <BeginStoryboard x:Name="ButtonCheckedStoryboardBegin"
                        Storyboard="{StaticResource MouseDownTimeLine}"/>
   </Trigger.EnterActions>
   <Trigger.ExitActions>
       <StopStoryboard BeginStoryboardName="ButtonCheckedStoryboardBegin"/>
   </Trigger.ExitActions>
</Trigger>

使用StopStoryboard是因为 MouseExitTimeLine 中的持续时间为零。如果您确实需要退出动画的持续时间,请使用:

<Trigger Property="IsChecked" Value="True">
   <Trigger.EnterActions>
       <BeginStoryboard Storyboard="{StaticResource MouseDownTimeLine}"/>
   </Trigger.EnterActions>
   <Trigger.ExitActions>
       <BeginStoryboard Storyboard="{StaticResource MouseExitTimeLine}"/>
   </Trigger.ExitActions>
</Trigger>

[第二个选项可以按原样使用 - 持续时间为零,但它不太优雅,IMO]

此外,MouseExitTimeLine 中“Hover”的动画是多余的,可以删除,因为 MouseDownTimeLine 没有在“Hover”上设置任何内容。

RadioButton现在,在布局中的每个实例上,添加GroupName="<Some string here>". 在任何给定时间点,只能检查组中的一个单选按钮。

于 2014-02-13T23:55:07.620 回答