WPF情节提要事件未触发

WPF情节提要事件未触发,wpf,storyboard,Wpf,Storyboard,我有一个简单的故事板,可以重复和自动反转。当它到达终点并自动反转时,我想在代码隐藏中触发一个事件。重复的时候也一样。我怎样才能做到这一点?最终,我在这两个事件中播放wav文件。谢谢。WPF动画由AnimationClock(有点像一个奇特的计时器)控制。AnimationClock有一个名为CurrentProgress的属性,范围从0到1;其中0是起点,1是终点。重复的故事板会逐渐将当前进度从0更改为1,从0更改为1 当AnimationClock指示动画渲染其下一帧时,动画将引发其Curre

我有一个简单的故事板,可以重复和自动反转。当它到达终点并自动反转时,我想在代码隐藏中触发一个事件。重复的时候也一样。我怎样才能做到这一点?最终,我在这两个事件中播放wav文件。谢谢。

WPF动画由AnimationClock(有点像一个奇特的计时器)控制。AnimationClock有一个名为CurrentProgress的属性,范围从0到1;其中0是起点,1是终点。重复的故事板会逐渐将当前进度从0更改为1,从0更改为1

当AnimationClock指示动画渲染其下一帧时,动画将引发其CurrentTimeInvalidated事件。此事件的发送方参数是AnimationClock。此时您可以检查当前进度。但是,由于此事件仅在绘制新帧时触发,因此CurrentProgress可能永远不会精确为0或1。相反,你需要寻找趋势。当您看到趋势变化时,这意味着循环已经开始或已经反转

样本xaml:

<Grid x:Name="uxGrid" Background="White">
    <Grid.Triggers>
        <EventTrigger RoutedEvent="Grid.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Storyboard.TargetName="uxGrid" Changed="ColorAnimation_Changed" CurrentTimeInvalidated="ColorAnimation_CurrentTimeInvalidated"  Storyboard.TargetProperty="Background.Color" From="Blue" To="Green" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>
</Grid>

示例代码:

private double? _clockLastProgress;  // Tracks Trend
private bool    _clockLastDecreased; // Tracks Trend Direction

private void ColorAnimation_CurrentTimeInvalidated(object sender, EventArgs e)
{
    AnimationClock clock = sender as AnimationClock;

    if (clock != null && clock.CurrentProgress.HasValue)
    {
        if (!_clockLastProgress.HasValue)
        {
            // Your Code Here
        }
        else
        {
            if (_clockLastDecreased)
            {
                if (clock.CurrentProgress > _clockLastProgress)
                {
                    // Your Code Here
                    _clockLastDecreased = false;
                }
            }
            else
            {
                if (clock.CurrentProgress < _clockLastProgress)
                {
                    // Your Code Here
                    _clockLastDecreased = true;
                }
            }
        }

        _clockLastProgress = clock.CurrentProgress.Value;
    }
}
私人双人房_clockLastProgress;//跟踪趋势
私人住宅跟踪趋势方向
私有void ColorAnimation\u CurrentTimeInvalidated(对象发送方,事件参数e)
{
AnimationClock=发送方作为AnimationClock;
if(clock!=null&&clock.CurrentProgress.HasValue)
{
如果(!\u clockLastProgress.HasValue)
{
//你的代码在这里
}
其他的
{
如果(_)
{
如果(clock.CurrentProgress>\u clockLastProgress)
{
//你的代码在这里
_clocklast=false;
}
}
其他的
{
如果(clock.CurrentProgress<\u clockLastProgress)
{
//你的代码在这里
_ClocklastDegregated=true;
}
}
}
_clockLastProgress=clock.CurrentProgress.Value;
}
}