在我的WPF项目中,我有一个画布,我在XAML中绘制一个椭圆并向其添加一个MouseEnter事件:
<Canvas Width="600" Height="480" Name="canvas1" HorizontalAlignment="Left">
<Ellipse Height="20" Width="20" Canvas.Left="50" Canvas.Top="50" Fill="blue" Name="ellipse1" Mouse.MouseEnter="ellipse1_MouseEnter" MouseLeave ="ellipse1_MouseLeave"/>
</Canvas>
在代码隐藏中我得到了这段代码:
private void ellipse1_MouseEnter(object sender, MouseEventArgs e)
{
ellipse1.Fill = Brushes.Red;
}
当我用鼠标输入椭圆时,它会按预期变为红色。
我还有代码在画布上绘制一个椭圆,我单击鼠标。我有一个名为Vertex的类,我在其中创建一个椭圆,它具有对画布的引用。
当我实例化一个新的顶点(以及一个椭圆)时,我将椭圆添加到画布'子节点。在将其添加到画布之前,我向MouseEnter事件添加了一个处理程序:
MyEllipse.MouseEnter += new System.Windows.Input.MouseEventHandler(MyEllipse_MouseEnter);
“MyEllipse_MouseEnter”处理程序如下所示:
private void MyEllipse_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
this.MyEllipse.Fill = Brushes.Red;
}
我希望这个工作,因为它与第一个有效的例子相同。
但是,当我用鼠标输入绘制的椭圆时,我的处理程序不是caleld。但是,当在椭圆上来回多次时,它最终将触发并将椭圆的颜色变为红色。但这只发生在我绘制的许多椭圆之一上,这看起来也很奇怪。
可能导致这种奇怪行为的原因是什么?
答案 0 :(得分:1)
解决了问题!
当将椭圆绘制为顶点的一部分时,我向椭圆添加一个标签。 更好的是,我在椭圆上面贴了一个标签:
Canvas.SetZIndex(myEllipse, 10);
Canvas.SetLeft(myEllipse, coordinates.X);
Canvas.SetTop(myEllipse, coordinates.Y);
Canvas.SetZIndex(myLabel, 10);
Canvas.SetLeft(myLabel, coordinates.X - 1);
Canvas.SetTop(myLabel, coordinates.Y - 5);
canvas.Children.Add(myEllipse);
canvas.Children.Add(myLabel);
因此,当我在画布上单击一个椭圆时,我实际上单击了标签而不是椭圆。他的解决方案很简单:
myLabel.IsHitTestVisible = false;
现在标签无法点击:D
无论如何!
答案 1 :(得分:0)
您可以共享用于以编程方式绘制椭圆的代码。我怀疑你的程序椭圆最初没有被填充使它透明,透明区域不被视为椭圆的一部分,因此消息不会被提升到椭圆。
如果我的上面的假设是正确的,那么当您获得消息的时候,就是当鼠标指针碰到椭圆的轮廓时。