事件处理程序部分工作

时间:2012-01-20 15:45:48

标签: c# wpf event-handling

我在一个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不工作。

The Gui

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

1 个答案:

答案 0 :(得分:0)

好的,我终于输掉了这个问题。我在矩形的下半部分添加了一个文本框,其中包含每个矩形的名称。这有足够的宽度覆盖小输入圆,因此鼠标事件处理程序不适用于上圆。我只修剪了它的宽度,处理程序适用于两个圆圈。真有欺骗性......