1
我有幾個Action1類的實例。他們每個人都應該在完成動畫後導航到不同的頁面。
女巫對象無所謂「被調用」,它總是導航到相同的頁面。
只要我在「Invoke」方法中導航,導航就能正常工作。
它看起來像「PageAnimation_Completed」一直在同一個對象實例上調用,爲什麼?
這是關於堆棧和堆?如何解決這個問題?
我有以下類:
public class Action1 : TriggerAction<DependencyObject>
{
PhoneApplicationPage page;
protected override void OnAttached() {
...
page = (PhoneApplicationPage)elem;
...
}
[System.Windows.Interactivity.CustomPropertyValueEditorAttribute(System.Windows.Interactivity.CustomPropertyValueEditor.Storyboard)]
public Storyboard PageAnimation { get; set; }
public static readonly DependencyProperty Message = DependencyProperty.Register("IsSpinning", typeof(Uri), typeof(Action1), null);
public Uri Page
{
get { return (Uri)GetValue(Message); }
set { SetValue(Message, value); }
}
protected override void Invoke(object o)
{
PageAnimation.Completed += new EventHandler(PageAnimation_Completed);
PageAnimation.Begin();
}
void PageAnimation_Completed(object sender, EventArgs e)
{
page.NavigationService.Navigate(new Uri("/" + this.Page.OriginalString, UriKind.RelativeOrAbsolute));
PageAnimation.Stop();
}
}
非常感謝你。這個問題我整天都失去了。 但是我仍然不明白這個問題 - 爲什麼它現在有效? – 2010-11-14 10:33:40
每次訂閱事件時,處理程序都會有效*添加*,而不是*替換*。因此,每次調用Invoke時,都會將'PageAnimation_Completed'添加到處理程序列表中,所以每次事件觸發時都會調用它,即使'Begin'是從另一個實例調用的(我假設在所有實例之間共享了「PageAnimation」 ) – 2010-11-14 13:42:57