我有简单的代码来动画画布上的动画。问题是动画完成后元素没有适当的值。
以下是示例:
<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";
}
完成动画后的结果
答案 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
);