我在一个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)侦听处理程序,上面没有。 真的很奇怪!
答案 0 :(得分:0)
好的,我终于输掉了这个问题。我在矩形的下半部分添加了一个文本框,其中包含每个矩形的名称。这有足够的宽度覆盖小输入圆,因此鼠标事件处理程序不适用于上圆。我只修剪了它的宽度,处理程序适用于两个圆圈。真有欺骗性......