在 C# 中重新订阅自定义事件说事件名称不在当前上下文中

Resubscribing to custom event in C# says event name not in the current context

在我的 WPF 项目中,我有一个在一秒钟内滑动的网格。我在其中一个上通过 mouseEnter 触发了这个。 MouseEnter -> OnMouseEnter() -> MoveMicroGrid 为每个网格运行以移动它们。 我意识到 MouseEnter 事件在整个动画中继续处于活动状态,即使未完成也重新开始。所以我添加了 SlideCompleted 事件,并尝试取消订阅并重新订阅 Grid_0_0 from/to,这样就不会中断动画。

在 Slide Completed 方法中,我被告知“名称 'OnMouseOver' 在当前模型中不存在”。是什么导致了这个问题,是否有更好的方法来处理暂停 'always active' 事件?

PS:省略了一些代码,但包含了我认为与该问题相关的所有部分。不知道这对这个网站是否合适...

    private void MoveMicroGrid(Grid g, Direction direction) {
        g.RenderTransform = new TranslateTransform(0, 0);
        Duration duration = new Duration(new TimeSpan(0, 0, 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, duration);
                anim.Completed += new EventHandler(SlideCompleted);
                g.RenderTransform.BeginAnimation(TranslateTransform.YProperty, 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, duration);
                anim.Completed += new EventHandler(SlideCompleted);
                g.RenderTransform.BeginAnimation(TranslateTransform.XProperty, 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);