WPF双动画设置错误值

时间:2010-12-19 09:59:07

标签: c# wpf

我有简单的代码来动画画布上的动画。问题是动画完成后元素没有适当的值。

以下是示例:

<Canvas Name="_canvas" >
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Top" Width="292"  Canvas.Left="56" Canvas.Top="26">
    <Button.Triggers>
            <EventTrigger RoutedEvent="ButtonBase.Click">
                <BeginStoryboard>
                    <Storyboard Completed="Timeline_OnCompleted">
                        <DoubleAnimation Duration="0:0:1" To="264" Storyboard.TargetProperty="(Canvas.Top)"/>                       
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>       
</Canvas>

在代码背后

private void Timeline_OnCompleted(object sender, EventArgs e)
{
    button1.Content = "Top is " + Canvas.GetTop(button1) + "and should be 264";
}

完成动画后的结果

example

2 个答案:

答案 0 :(得分:2)

这是WPF中确认的错误:故事板的已完成事件在包含的时间线完成之前触发(请参阅Connect)。

如果您在DoubleAnimation上处理Completed事件,它将显示正确的结束值。

答案 1 :(得分:0)

似乎在最后一个动画步骤完成之前调用了OnCompleted。如果你真的需要阅读按钮的顶部位置(即不能接受DoubleAnimation.To),请尝试在应用程序空闲时运行Canvas.GetTop(button1)(或尝试调度程序的其他优先级)。

Dispatcher.BeginInvoke(
    (Action)(
        () => button1.Content = "Top is " + Canvas.GetTop(button1) + "and should be 264"
    ),
    DispatcherPriority.ApplicationIdle
);