MouseEnter事件并不总是被触发

时间:2010-07-30 21:43:18

标签: c# wpf events mouseevent

在我的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。但是,当在椭圆上来回多次时,它最终将触发并将椭圆的颜色变为红色。但这只发生在我绘制的许多椭圆之一上,这看起来也很奇怪。

可能导致这种奇怪行为的原因是什么?

2 个答案:

答案 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)

您可以共享用于以编程方式绘制椭圆的代码。我怀疑你的程序椭圆最初没有被填充使它透明,透明区域不被视为椭圆的一部分,因此消息不会被提升到椭圆。

如果我的上面的假设是正确的,那么当您获得消息的时候,就是当鼠标指针碰到椭圆的轮廓时。