私は、WPF/WP7 Silverlight でアタッチされたビヘイビアーについて学ぼうとしていますが、誰かが検討できるかどうか疑問に思った概念的な障害に直面しました。
私が作成しようとしている機能の例は次のとおりです: ユーザーが Click ハンドラーがナビゲーションをトリガーするボタン (つまり、NavigationContext.Navigate()) をクリックすると、ナビゲーションが実際に発生する前に、ボタンでアニメーションが発生します。不透明度を 1 から 0 に減らします (「フェードアウト」効果)。
したがって、順番に:
- ユーザーがボタンをクリックする
- ボタンはアニメーションを実行します
- ナビゲーションが発生します
簡単ですよね?次のようなアタッチされた動作を作成しました。
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 にナビゲーションをトリガーする Click ハンドラーが含まれていない場合、これは明らかに正常に機能しますが、それを接続すると、ナビゲーションが発生する前にアニメーションが完了しません。もちろん、これがなぜなのかは理解していますが、これを達成する方法があり、ひどいデザインではないという素晴らしい特性も示しているのではないかと考えています.
一見関連しているこのSOスレッドを見つけましたが、受け入れられた答えは本当にこれを行う唯一の方法ですか?
ご協力いただきありがとうございます。
編集: たまたま WP7 を持っていて、これを理解しようと必死になっている場合、Reddit リーダー アプリ「Baconit」は、ストーリーのタイトルをクリックしたときに、私が興味を持っているものと同様の動作を示します。