2012-03-15 15 views
1

私はCMを使用するWPFプロジェクトを持っています。私はスムーズにアニメートしたいプログレスバーを持っています。私はDoubleAnimationを含むストーリーボードを持っています。問題は、DoubleAnimationのDurationをビューモデルのプロパティにバインドしようとすると、プログラムの実行中にTargetInvocationExceptionが発生することです。DoubleAnimationの持続時間にバインドすると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

私が知っている限り、この実装方法ではアニメーションにバインドするのは、常にエラーをスローします。 アニメーション中にTimeline -Objectのプロパティを変更する場合は、方法<StoryboardName>.Begin()を使用して、Storyboardおよび<StoryboardName>.Seek()の到達時間にジャンプする新しいクロックを作成する必要があります。

<name>.Begin()メソッドを呼び出す前に、目的のプロパティを変更すると効果があります。 MSDNの例彼らの存在

TimeLine -objectのMSDNの例では「唯一」KeyFrames -objectsが変更されることを、実際に http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wpfsamples&DownloadId=7734

は、あなたがStoryboard.Stop()メソッドを呼び出す必要がありますDurationプロパティを変更する前に

は、それを試してみて、多分それは役立ちます:)

種類は事がある Sbの

+0

に関しては、私はアニメーションが実行されている間、期間を変更するつもりはありませんよ。私がしたいことは、バインディングを使用してアニメーションの期間を設定し、その後アニメーションを開始することです。これは可能なはずですが、私が試した組み合わせはうまくいきませんでした。 –

+0

ねえ。あなたがDuration-Bindingではないという例外があります。問題はStoryboard.TargetNameです。テンプレート以外のスタイルでStoryboard.TargetNameを使用することはできません。 http://msdn.microsoft.com/en-us/library/ms742868.aspx(#alignスタイルでアニメーション) Storyboard.TargetName-Propertyを設定せずにあなたのソリューションを試してみるとうまくいくはずです。 – Shounbourgh

+0

私はそれが問題だとは思わない。 Storyboard.Targetセットと静的持続時間でうまく動作します。期間を追加すると直ちに停止します。しかし、リンクをありがとう、役に立つと思われる。 –