将动画设置为在按钮上触发第二次单击而不是先单击

时间:2017-09-27 19:10:58

标签: wpf vb.net xaml animation storyboard

我的主页面中有一个框架,我已设置为在按钮单击时拉伸/滑动。我不希望框架在第一次按钮单击时拉伸/滑动,而是在用户第二次单击该按钮时。 XAML:

        <Storyboard x:Key="FrameSlide">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="currentPage">
            <SplineDoubleKeyFrame KeyTime="0" Value="1"/>
            <SplineDoubleKeyFrame KeyTime="0:0:0.7" Value="1.217"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="currentPage">
            <SplineDoubleKeyFrame KeyTime="0" Value="0"/>
            <SplineDoubleKeyFrame KeyTime="0:0:0.7" Value="-126"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="FrameSlideBack">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="currentPage">
            <SplineDoubleKeyFrame KeyTime="0" Value="1.217"/>
            <SplineDoubleKeyFrame KeyTime="0:0:0.7" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="currentPage">
            <SplineDoubleKeyFrame KeyTime="0" Value="-126"/>
            <SplineDoubleKeyFrame KeyTime="0:0:0.7" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>




</Window.Resources>
<Window.Triggers>
    <EventTrigger RoutedEvent="UIElement.MouseLeftButtonDown" SourceName="TransmitBTN">
        <BeginStoryboard x:Name="FrameSlide" Storyboard="{StaticResource FrameSlide}"/>
    </EventTrigger>
    <EventTrigger RoutedEvent="UIElement.MouseLeftButtonDown" SourceName="PatientBTN">
        <BeginStoryboard x:Name="FrameSlideBack" Storyboard="{StaticResource FrameSlideBack}"/>
    </EventTrigger>
</Window.Triggers>

我已经尝试在我的VB.net代码中使用storyboard.stop()/ storyboard.being()按钮,但似乎xaml已经超越了vb代码。我已经厌倦了if if我的框架是一定宽度的语句,然后什么都不做就触发动画。 不知道从哪里开始。 感谢

1 个答案:

答案 0 :(得分:0)

我在C#中回答这个问题,因为我不知道VB,但据我所知,你可以轻易改变它?

我可以跟我们一起回答的是在按钮上创建一个事件,button_click,在类中创建一个公共属性。如果事件增加属性,当它达到2时,触发你的故事板。

按钮事件的XAML:

public partial class StackOverFlowExample
{
   public StackOverFlowExample()
   {
    InitializaComponent();
    buttonClickCounter = 0;
   }

   public int buttonClickCounter {get; set;}

   private void Button_Click(object sender, RoutedEventArgs e)
   {
     buttonClickCounter++;
     if (buttonClickCounter == 2)
     {
      buttonClickCounter = 0;

      Storyboard sb = Application.Current.Resources["FrameSlide"] as 
      Storyboard;

      if (sb.IsSealed)
          sb = sb.Clone();
      Storyboard.SetTarget(sb, this.NextButton);
      sb.Completed += delegate { };
      sb.Begin();
     }

   e.Handled = true;
   }
}

C#代码:

Gender