绑定到DoubleAnimation的持续时间会抛出TargetInvocationException

时间:2012-03-15 13:44:47

标签: wpf caliburn.micro

我有一个使用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);
    }
} 

我觉得答案是直视着我,但我根本找不到它。提前感谢您的帮助。

1 个答案:

答案 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 - 属性。

尝试一下,也许有帮助:)

亲切的问候 锑