【问题标题】:MouseEnter event is not always triggeredMouseEnter 事件并不总是被触发
【发布时间】:2017-09-08 22:11:13
【问题描述】:

在我的 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;
    }

我希望它能够工作,因为它与第一个工作的示例相同。

但是,当我用鼠标输入绘制的椭圆时,我的处理程序没有被调用。但是,当在椭圆上来回多次时,它最终会触发并将椭圆着色为红色。但这只会发生在我绘制的众多椭圆之一上,这似乎也很奇怪。

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

【问题讨论】:

    标签: c# wpf events mouseevent


    【解决方案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

    谢谢大家!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 2011-08-31
        • 1970-01-01
        • 2013-08-14
        • 2020-02-27
        • 2014-12-28
        相关资源
        最近更新 更多