Событие MouseEnter не всегда срабатывает - PullRequest
1 голос
/ 31 июля 2010

В моем проекте 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;
    }

Я ожидал, что это сработаеттак же, как первый пример, который работает.

Однако, когда я вхожу в нарисованный эллипс с помощью мыши, мой обработчик не вызывается.НО, если многократно перемещаться по эллипсу, он в конечном итоге сработает и покрасит эллипс в красный цвет.Но это происходит только на одном из множества нарисованных мною эллипсов, что также кажется очень странным.

Что может быть причиной такого странного поведения?

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Решил проблему!

При рисовании эллипса как части вершины я добавляю метку к эллипсу.Лучше сказать, я положил ярлык поверх эллипса:

        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

Спасибо всем!

0 голосов
/ 31 июля 2010

Можете ли вы поделиться кодом, который вы используете для программной прорисовки эллипса? Я подозреваю, что ваш программный эллипс изначально не заполнен, что делает его прозрачным, прозрачная область не рассматривается как часть эллипса, и поэтому сообщения не передаются в эллипс.

Если мое предположение выше верно, то когда вы получаете сообщения, это когда указатель мыши попадает в контур эллипса.

...