2012-02-10 4 views
2

私はWPF/WP7 Silverlightの添付行動について学ぶためにしようとしている、と私は誰かが中に重量を量ることができれば、私は疑問に思い概念バリケードに対して作ってみました。WPF/WP7添付ビヘイビア - 関連するオブジェクトのイベント発射前に実行

私が作成しようとしている機能の例は、次のとおりです。クリックハンドラがナビゲーションをトリガーするボタン(NavigationContext.Navigate())をユーザーがクリックし、実際にナビゲーションが行われる前にアニメーションが発生します不透明度を1から0(フェードアウト効果)に減少させるボタン上のボタンです。

ので、順番に:

  1. ユーザーが
  2. ボタンはナビゲーションが右、十分

シンプル発生

  • アニメーションに実行ボタンをクリックしますか?私はそうのように見える添付ビヘイビアを作成:

    public class FadeBehavior : Behavior<Button> 
    { 
        protected override void OnAttached() 
        { 
         base.OnAttached(); 
    
         AssociatedObject.Click += (obj, args) => { 
          Storyboard sb = new Storyboard(); 
    
          DoubleAnimation an = new DoubleAnimation(); 
          an.Duration = TimeSpan.FromMilliseconds(300); 
          an.From = 1; 
          an.To = 0; 
          Storyboard.SetTarget(an, AssociatedObject); 
          Storyboard.SetTargetProperty(an, new PropertyPath("Opacity")); 
    
          sb.Children.Add(an); 
          sb.Begin(); 
         }; 
        } 
    } 
    

    ページボタンの上の.xaml.csナビゲーションをトリガーするクリックハンドラが含まれていない場合、これは明らかに正常に動作しますが、私はそれを配線するとき、ナビゲーションが行われる前にアニメーションが完了しません。私はなぜこれが当然ののか理解していますが、これを達成する方法があるかどうか疑問に思っています。これは、非ひどいデザインの素晴らしい特性も示しています。

    は、私は、一見関連が、実際に受け入れられた答えは、これを行うための唯一の方法ですthis SO threadを見つけましたか?

    ありがとうございました。

    EDIT:WP7を持っていて、これを理解していると、Redditリーダーのアプリ「Baconit」は、あなたがストーリー。

  • +0

    を(http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.completed.aspx)イベントが終了したら何かをするためのストーリーボードまたはアニメーション。 – Clemens

    +0

    よろしくお願いします。そのアイディアが私に起こりました。私はデザインエキスパートではありませんが、ビヘイビアは実際にこのようなことをするように設計されていると思いました。アニメーションストーリーボードに関する何かをxaml.csが知っている必要はありません。 。しかし、それは私がやってしまうことかもしれません:-)ありがとう! – Jammer

    +0

    あなた自身の[NavigateToPageAction](http://msdn.microsoft.com/en-us/library/ff979325(v = expression.40).aspx)の動作を独自に作成することもできます。次に、Completedイベントを使用して、ビヘイビア内の指定されたページに移動できます。私はそれを試していない。私はxaml.csのclickイベントを使用してもまだ問題が発生すると思います。 –

    答えて

    0

    あなたは添付の行動を作成している場合、私はあなたが背後にあるコードを排除することを目指していると仮定していますか?ただし、クリックハンドラをボタンに追加したいと思っています。その結果、コードが邪魔になりますか?ここに矛盾があるようです!

    私はあなたの背後にあるコードに満足している場合は、添付の行動を忘れ二つのオプション...

    を参照してください!アニメーションを実行するユーティリティクラスを作成し、完了時にデリゲートを呼び出します。このエフェクトを適用したいところはどこにでも使用できます。

    あなたはコマンドではなく、クリックハンドラを使用する必要があります後ろにコードを排除したい場合。ストーリーボードが完了したときに実行される、添付されたビヘイビアにICommandプロパティを追加します。これを、ビューモデルに公開されたコマンドにバインドすることができます。

    ので、ブレンド動作プロパティで可能であるかの結合を示す質問を参照してください:あなたはひどいデザインとしてそれを考慮すれば、知らないが、私はいつも[完了]にハンドラをアタッチう

    Blend Behaviours - can you bind to their properties?

    関連する問題