自定义EventTrigger来使用RoutedEvent来制作动画

本文关键字:RoutedEvent 动画 EventTrigger 自定义 | 更新日期: 2023-09-27 18:13:15

这就是我想要完成的。

这是一个售货亭的条形码阅读器。

  • 主屏幕textBlock应该显示"Scan barcode"
  • 条形码读取后
  • 连接到远程SQL Server检查条形码是否符合
  • 如果它符合条件,主文本块应该说"你赢了....."1分钟,并显示按钮打印获胜。
  • 如果不符合条件,它应该说5秒钟"请与收银员核对"
  • 如果是错误的条形码,它应该提示5秒"错误的条形码,再试一次"
  • 它应该总是在结束时恢复为"扫描条形码"

我明白最好在文本块上做一个动画,但是我如何从代码中触发动画。

这可能是一个更简单的方法,如果有,请告诉我。

我用VB写代码,很老的学校,但是我可以很容易地在线转换你的c#代码。

Thanks in advance

自定义EventTrigger来使用RoutedEvent来制作动画

我将使用TextChanged事件,所以一个例子将是这样的。

    private void txScanBox_TextChanged(object sender, EventArgs e)
    {
            //Do whatever
    return;
    }

目前我正在使用这种方法,如果您有更好的方法,请告诉我。

在xaml中,我创建了3个没有触发器的故事板。

<Window.Resources>
    <Storyboard x:Key="WrongBarcode">
        <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" Storyboard.TargetName="txtbScan">
            <DiscreteStringKeyFrame KeyTime="0:0:0" Value="Wrong Barcode"/>
            <DiscreteStringKeyFrame KeyTime="0:0:4" Value="Scan your barcode"/>
        </StringAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="Win">
        <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" Storyboard.TargetName="txtbScan">
            <DiscreteStringKeyFrame KeyTime="0:0:0" Value="Hurray You Won"/>
            <DiscreteStringKeyFrame KeyTime="0:0:25" Value="Scan your barcode"/>
        </StringAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="Unqulified">
        <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" Storyboard.TargetName="txtbScan">
            <DiscreteStringKeyFrame KeyTime="0:0:0" Value="Please Qualify your card at the Cashier."/>
            <DiscreteStringKeyFrame KeyTime="0:0:4" Value="Scan your barcode"/>
        </StringAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

后面的代码
Private Sub Window_KeyDown(sender As Object, e As KeyEventArgs)
    Static curBarcode As String
    If e.Key = 6 Then 'Found that it hits key6 at the end of each barcode read
        Select Case ValidateCard(curBarcode)
            Case 0
                Dim Unqulified As Storyboard = DirectCast(FindResource("Unqulified"), Storyboard)
                Unqulified.Begin(Me)
            Case 1
                Dim win As Storyboard = DirectCast(FindResource("Win"), Storyboard)
                win.Begin(Me)
            Case Else
                Dim WrongBarcode As Storyboard = DirectCast(FindResource("WrongBarcode"), Storyboard)
                WrongBarcode.Begin(Me)
        End Select
        'txtbScan.Text = "Scan your gift card."
        curBarcode = ""
    Else
        curBarcode = curBarcode & Mid(e.Key.ToString(), 2, 1)
        '

    End If
End Sub

我仍然需要改变获胜的文本,它有很多变化。我正在考虑添加一个更大的文本块,甚至可能是一个图像,并在代码和动画可见性中设置值。

请让我知道你的想法。

谢谢