2012-06-14 4 views
5

私はすべてを検索しましたが、この回答を見つけることはできません。私のアプリはゆるいXAMLの世界にありますので、要素を見つけるためにXamlReadersやツリーウォーキングに頼らざるを得ません。これらのXAMLページのレンダリングを処理するコンポーネントがあります。そのレンダラーは、ロードされたXAML上で実行可能なストーリーボードの状態を知る必要があります。だから私のレンダラで何をしたいのですか? -ストーリーボード上のGetCurrentStateが定義され、XAMLで開始されました

var resources = _currentScreenFrameworkElement.Resources; 
foreach (var item in resources.Values) 
{ 
    if (item is Storyboard) 
    { 
     try 
     { 
      var storyboard = item as Storyboard; 
      **if (storyboard.GetCurrentState() == ClockState.Active)** 

すべてがうまくいいです。

"Cannot perform action because the specified Storyboard was not applied to this object for interactive control." 

私はストーリーボードを制御可能にする必要があるからだと見るの周り探し - :しかし、問題は、私はdcheck currentStateのをしようとすると、それが例外をスローしています。だから私の質問は、私はXAMLでこれを行うのですか?私はコードでストーリーボードを開始しないので、オーバーロードされたBeginStoryboardに真実を伝えることはできません。

答えて

5

私はちょうどこの同じ問題に遭遇したので、私は私の所見を分かち合うと思った。

ストーリーボードが制御可能とマークされていないと、このエラーが発生します。ストーリーボードは、Beginメソッドが呼び出されると、Controllableとしてマークされます。

このコードでは、このIsControllableブール値の引数(list of Begin overloads)を持つオーバーロードを使用します。

XamlでBeginAnimation要素を使用した場合、2つのことを行う必要があります。

  1. NameをBeginAnimation要素に割り当てます。このプロパティのdocumentationには、「BeginStoryboardの名前が指定されていない場合、ストーリーボードに対話的に影響を与えることができない場合」
  2. コードビハインドでストーリーボードとやりとりするときは、あなたのbeginStoryboardの中で宣言されたオブジェクト。

ここでは、あなたが

<Button Name="btn1" Content="bla"> 
    <Button.Triggers> 
    <EventTrigger RoutedEvent="Button.Click"> 
     <BeginStoryboard 
      Name="bnt1_beginStoryboard" 
      Storyboard={StaticResource someSharedStoryboard}"/> 
    </EventTrigger> 
    </Button.Triggers> 
</Button> 

(beginstoryboardに名前を付ける)1ステップと、ここにあなたができるあなたのbeginStoryboardを命名したので、ステップ2のための例です示す例ですあなたのクラスのローカル変数としてそれを使用してください。実際のストーリーボードを直接参照してください。主なポイントはここに合格する必要がストーリーボード上のすべての「アクション」メソッドのリストです

//The main point here is that we're passing in btn1 
bnt1_beginStoryboard.Storyboard.Stop(btn1); 
bnt1_beginStoryboard.Storyboard.SkipToFill(btn1); 
bnt1_beginStoryboard.Storyboard.Resume(btn1); 

あなたは(この場合はボタンです)beginStoryboardの所有者に渡さなければならないということです所有フレームワーク要素:Control a Storyboard After It Starts