我有一个使用CM的WPF项目。我有一个进度条,我想顺利制作动画。我有一个包含DoubleAnimation的故事板。问题是,当我尝试将DoubleAnimation的Duration绑定到我的视图模型上的属性时,我在运行程序时遇到了TargetInvocationException。
进度条的XAML如下所示:
<ProgressBar Name="ProgressBar" Width="400" Height="18">
<ProgressBar.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsMeasuring}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.Target="{Binding TemplatedParent}"
Storyboard.TargetProperty="Value"
From="0"
To="100"
Duration="{Binding MeasurementDuration}"
/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</ProgressBar.Style>
</ProgressBar>
虽然我的视图模型中的属性如下所示:
private Duration measurementDuration = new Duration(TimeSpan.FromSeconds(1));
public Duration MeasurementDuration
{
get { return measurementDuration; }
private set
{
measurementDuration = value;
NotifyOfPropertyChange(() => MeasurementDuration);
}
}
我觉得答案是直视着我,但我根本找不到它。提前感谢您的帮助。
答案 0 :(得分:1)
据我所知,在这种实现方式中绑定动画,因为你的引发始终是一个错误。
如果要在动画时更改Timeline
- 对象的属性,则必须使用方法<StoryboardName>.Begin()
为Storyboard
和<StoryboardName>.Seek()
创建新时钟跳到达到的持续时间。
在调用<name>.Begin()
方法之前,您需要更改所需的属性,它应该可以正常工作。
他们在msdn中存在一个例子: http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wpfsamples&DownloadId=7734
事实上,在msdn示例中“仅”KeyFrames
- TimeLine
- 对象的对象将被更改,您必须在更改之前调用Storyboard.Stop()
方法Duration
- 属性。
尝试一下,也许有帮助:)
亲切的问候 锑