如何解决重新订阅C#中的自定义事件表示事件名称不在当前上下文中
在我的WPF项目中,我有一个网格栅格,这些栅格在1秒的时间内滑动。我是通过其中之一的mouseEnter触发的。 MouseEnter-> OnMouseEnter()-> MoveMicroGrid为每个网格运行以移动它们。 我意识到MouseEnter事件对于整个动画仍然是活动的,即使没有完成也要重新开始。因此,我添加了SlideCompleted事件,并尝试取消订阅Grid_0_0并重新订阅它,以便没有任何东西可以中断动画。
在“已完成幻灯片”方法中,系统提示我“当前模型中不存在名称'OnMouseOver'”。是什么原因引起的,有没有更好的方法来处理“始终处于活动状态”的事件的暂停?
PS:省略了一些代码,但包括了我认为与该问题有关的所有部分。不知道这对本网站是否合适...
private void MoveMicroGrid(Grid g,Direction direction) {
g.RenderTransform = new TranslateTransform(0,0);
Duration duration = new Duration(new TimeSpan(0,1,0));
DoubleAnimation anim;
switch (direction) {
case Direction.Up:
anim = new DoubleAnimation(-microGridDistanceY,duration);
anim.Completed += new EventHandler(SlideCompleted);
g.RenderTransform.BeginAnimation(TranslateTransform.YProperty,anim);
break;
case Direction.Down:
anim = new DoubleAnimation(microGridDistanceY,anim);
break;
case Direction.Left:
anim = new DoubleAnimation(-microGridDistanceX,duration);
anim.Completed += new EventHandler(SlideCompleted);
g.RenderTransform.BeginAnimation(TranslateTransform.XProperty,anim);
break;
case Direction.Right:
anim = new DoubleAnimation(microGridDistanceX,anim);
break;
}
}
private void SlideCompleted(object sender,EventArgs e)
{
Grid_0_0.MouseEnter += new MouseEventHandler(OnMouseOver); //<-- This is the error line
ResetBoardSlide();
}
private void OnMouseEnter(object sender,MouseEventArgs e)
{
Grid_0_0.MouseEnter -= OnMouseEnter;
SlideBoard(Direction.Down);
}
解决方法
您似乎输入了错误的事件处理程序名称。在SlideCompleted()
方法中,您已经了解了这一点:
Grid_0_0.MouseEnter += new MouseEventHandler(OnMouseOver);
但是您在示例中提供的事件处理程序称为OnMouseEnter
,而不是OnMouseOver
。我怀疑这就是为什么您看到该错误消息的原因。因此,您可以重命名有问题的方法,或将上面的行更改为:
Grid_0_0.MouseEnter += new MouseEventHandler(OnMouseEnter);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。