如果myStoryboard还没有开始,请确定情节提要是否处于活动状态?

时间:2019-03-19 23:15:50

标签: c# wpf vb.net animation storyboard

1-将以下代码复制并粘贴到 MainWindow.xaml 文件中。

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <Label x:Name="Label1" Height="25" Width="100" Background="Gainsboro"/>
    <TextBox x:Name="TextBox1" Height="25" Width="100" Background="Pink" Text="Hello"/>
</StackPanel>
</Window>

2-将以下代码复制并粘贴到后面的代码文件中。

Class MainWindow

Private WithEvents myDispatcherTimer As New System.Windows.Threading.DispatcherTimer

Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    AddHandler myDispatcherTimer.Tick, AddressOf myCode_Tick
    myDispatcherTimer.Interval = TimeSpan.FromSeconds(0.5)
    myDispatcherTimer.Start()
End Sub

Private Sub myCode_Tick(ByVal sender As Object, ByVal e As EventArgs)

    Dim myColorAnimation As New Animation.ColorAnimation With {.From = Colors.Transparent, .To = Colors.Red, .Duration = TimeSpan.FromSeconds(0.4), .AutoReverse = True}
    Animation.Storyboard.SetTargetName(element:=myColorAnimation, name:="Label1")
    Animation.Storyboard.SetTargetProperty(element:=myColorAnimation, path:=New PropertyPath("(Label.Background).(SolidColorBrush.Color)"))
    Dim myStoryboard As New Animation.Storyboard
    myStoryboard.Children.Add(myColorAnimation)

    If Not TextBox1.Text = "Hello" Then
        myStoryboard.Begin(containingObject:=Me, isControllable:=True, handoffBehavior:=Animation.HandoffBehavior.SnapshotAndReplace)
    Else
        If myStoryboard.GetCurrentState(containingObject:=Me) = Animation.ClockState.Active Then
            myStoryboard.Stop(containingObject:=Me)
        End If
    End If

End Sub

End Class

3-运行该项目,等待两秒钟,然后看到此错误:https://prnt.sc/n08a3j

错误消息:

  

由于未应用指定的故事板,因此无法执行操作   对该对象进行交互式控制

那么,我该如何解决该错误?

如果myStoryboard还没有开始,如何确定情节提要是否处于活动状态?

1 个答案:

答案 0 :(得分:0)

这里有2个问题,第一个问题是除非更改文本,否则代码不会调用Begin方法。但是,Begin方法确定Storyboard是否可控

要呼叫GetCurrentState,需要该可控标志。

因此请确保先调用Begin(我不知道您的应用程序应该对初始文本执行什么操作,但是您是想在{{中使用 NOT 1}}?

第二,您要将 containsObject 传递给If NOT TextBox1.Text = "Hello" Then

GetCurrentState

我已经应用了2个更改,并且该应用程序能够无例外地运行动画。