C#委托方法丢失类字段/事件丢失类字段
请帮忙 我有几个Action1类的实例。他们每个人都应该在动画完成后导航到不同的页面 “调用”witch对象并不重要,它总是导航到同一页面 只要我在“Invoke”方法中导航,导航就会正常工作 看起来“PageAnimation_Completed”总是在同一个对象实例上调用,为什么 这是关于堆叠的吗?如何解决这个问题 我有以下课程:C#委托方法丢失类字段/事件丢失类字段,c#,events,delegates,C#,Events,Delegates,请帮忙 我有几个Action1类的实例。他们每个人都应该在动画完成后导航到不同的页面 “调用”witch对象并不重要,它总是导航到同一页面 只要我在“Invoke”方法中导航,导航就会正常工作 看起来“PageAnimation_Completed”总是在同一个对象实例上调用,为什么 这是关于堆叠的吗?如何解决这个问题 我有以下课程: public class Action1 : TriggerAction<DependencyObject> { PhoneApplicati
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();
}
}
公共类操作1:TriggerAction
{
电话应用页面;
受保护的覆盖无效附加(){
...
页面=(PhoneApplicationPage)元素;
...
}
[System.Windows.Interactivity.CustomPropertyValueEditorAttribute(System.Windows.Interactivity.CustomPropertyValueEditor.Storyboard)]
公共情节提要页面动画{get;set;}
public static readonly dependencProperty Message=dependencProperty.Register(“IsSpinning”、typeof(Uri)、typeof(Action1)、null);
公共Uri页
{
获取{return(Uri)GetValue(Message);}
set{SetValue(消息,值);}
}
受保护的覆盖无效调用(对象o)
{
PageAnimation.Completed+=新事件处理程序(PageAnimation_Completed);
PageAnimation.Begin();
}
void PageAnimation_已完成(对象发送方,事件参数e)
{
page.NavigationService.Navigate(新Uri(“/”+this.page.OriginalString,UriKind.RelativeOrAbsolute));
PageAnimation.Stop();
}
}
您需要取消订阅页面动画。已完成
事件:
void PageAnimation_Completed(object sender, EventArgs e)
{
PageAnimation.Completed -= PageAnimation_Completed;
page.NavigationService.Navigate(new Uri("/" + this.Page.OriginalString, UriKind.RelativeOrAbsolute));
PageAnimation.Stop();
}
您需要取消订阅
页面动画。已完成事件:
void PageAnimation_Completed(object sender, EventArgs e)
{
PageAnimation.Completed -= PageAnimation_Completed;
page.NavigationService.Navigate(new Uri("/" + this.Page.OriginalString, UriKind.RelativeOrAbsolute));
PageAnimation.Stop();
}
非常感谢你。我为这个问题浪费了一整天的时间。但是我仍然不理解这个问题——为什么它现在可以工作?每次订阅事件时,处理程序都会被有效地添加,而不是替换。因此,每次调用Invoke时,都会将PageAnimation\u Completed
添加到处理程序列表中,因此每次触发事件时都会调用它,即使Begin
是从另一个实例调用的(我假设PageAnimation
在所有实例之间共享),非常感谢。我为这个问题浪费了一整天的时间。但是我仍然不理解这个问题——为什么它现在可以工作?每次订阅事件时,处理程序都会被有效地添加,而不是替换。因此,每次调用Invoke时,都会将PageAnimation\u Completed
添加到处理程序列表中,因此每次触发事件时都会调用它,即使Begin
是从另一个实例调用的(我假设PageAnimation
在所有实例之间共享)