C# 事件处理程序部分工作

C# 事件处理程序部分工作,c#,wpf,event-handling,C#,Wpf,Event Handling,我在WPF应用程序的一个类中创建了两个相同的圆,并希望将相同的事件分配给它们。然而,只有其中一个事件处理者有效,而另一个则无效。我尝试用两个不同的名称实现相同的事件处理程序,但仍然发生相同的情况。以下代码可能存在什么潜在问题 SmallCircle leftCircle1 = new InputCircle(Brushes.Yellow, 7, 7); Ellipse s1Ellipse = leftCircle1.thisEllipse; rectCanvas.Children.Add(s1

我在WPF应用程序的一个类中创建了两个相同的圆,并希望将相同的事件分配给它们。然而,只有其中一个事件处理者有效,而另一个则无效。我尝试用两个不同的名称实现相同的事件处理程序,但仍然发生相同的情况。以下代码可能存在什么潜在问题

SmallCircle leftCircle1 = new InputCircle(Brushes.Yellow, 7, 7);
Ellipse s1Ellipse = leftCircle1.thisEllipse; 
rectCanvas.Children.Add(s1Ellipse);
SmallCircle leftCircle2 = new InputCircle(Brushes.Yellow, 7, 7);
Ellipse s2Ellipse = leftCircle2.thisEllipse;
rectCanvas.Children.Add(s2Ellipse);

s1Ellipse.MouseLeftButtonDown += new MouseButtonEventHandler(input_MouseLeftButtonDown1);
s2Ellipse.MouseLeftButtonDown += new MouseButtonEventHandler(input_MouseLeftButtonDown1);
s3Ellipse.MouseLeftButtonDown += new MouseButtonEventHandler(output_MouseLeftButtonDown1);    


 private void output_MouseLeftButtonDown1(object sender, MouseButtonEventArgs e)
    {
        rectCanvas.MouseLeftButtonDown -= Canvas_MouseLeftButtonDown;
        rectCanvas.MouseLeftButtonUp -= Canvas_MouseLeftButtonUp;
        rectCanvas.MouseMove -= Canvas_MouseMove;


        nodeComb.lineCreated = true;
        Point StartPosition = e.GetPosition(sender as UIElement);
        nodeComb.initialPoint = StartPosition;

    }

    private void input_MouseLeftButtonDown1(object sender, MouseButtonEventArgs e)
    {
        if (nodeComb.lineCreated == true)
        {
            Point EndPosition = e.GetPosition(sender as UIElement);
            nodeComb.endingPoint = EndPosition;
            nodeComb.createLine();
            nodeComb.lineCreated = false;
        }

    }     
特别是,s2Ellipse事件处理程序可以工作,而s1Ellipse不能

只有底部的输入圆(s2)侦听处理程序,上面的不侦听。
真的很奇怪

好吧,我终于解决了这个问题。我在矩形的下半部分添加了一个文本框,其中包含每个矩形的名称。这有足够的宽度来覆盖小的输入圆,这样鼠标事件处理程序就不会应用于上面的圆。我刚刚修剪了它的宽度,处理程序应用于两个圆。真的很有欺骗性…

为什么你会期望事件也由s1触发?我希望两个形状都“监听”同一事件,以便为它们中的任何一个画一条结束线?即使我更改了它们的顺序,也只会触发s2。您能显示结果GUI的图像吗?我创建了一个简单的项目,其中两个省略号共享同一个单击事件处理程序,它可以工作。这就是你要找的吗?为什么要取消订阅MouseDown事件?是否希望单击两个省略号中的任何一个都能收到事件?