Почему MouseLeftButtonUp не запускается в WPF? - PullRequest
2 голосов
/ 16 июля 2011

Почему не срабатывает MouseLeftButtonUp на моем Canvas в моем приложении WPF?Вот код XAML:

<Grid Height="300" Width="400">
    <Canvas Name="canvas" MouseMove="canvas_MouseMove" MouseLeftButtonUp="canvas_MouseLeftButtonUp" Background="LightGray"/>
</Grid>

и код:

    private bool hasClicked = false;

    public Window1()
    {
        InitializeComponent();
    }

    private void canvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (!this.hasClicked)
        {
            this.Cursor = Cursors.None;
            this.canvas.Children.Clear();
            this.insertRectangle(false);
        }
    }

    private void insertRectangle(bool filled)
    {
        Rectangle rect = createRect(filled);
        Point pos = Mouse.GetPosition(this.canvas);
        Canvas.SetLeft(rect, pos.X);
        Canvas.SetTop(rect, pos.Y);
        this.canvas.Children.Add(rect);
    }

    private Rectangle createRect(bool fill)
    {
        Rectangle rect = new Rectangle();
        rect.Height = 50;
        rect.Width = 120;
        if (fill)
        {
            rect.Fill = new SolidColorBrush(Colors.Green);
        }
        else
        {
            rect.Stroke = new SolidColorBrush(Colors.Green);
        }
        return rect;
    }

    private void canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        this.hasClicked = true;
        this.insertRectangle(true);
        this.Cursor = Cursors.Arrow;
    }

Редактировать: я пытался добавить цвет фона на холст, но событие все еще не запущено.Похоже, что MouseMove каким-то образом переопределяет MouseLeftButtonUp.

Edit2: если я удаляю событие MouseMove, будет запускаться mouseLeftButtonUp.

Edit3: Пример кода большего размера.В методе insertRectangle, если я использую

 Canvas.SetTop(rect, 50);
 instead of 
 Canvas.SetTop(rect, pos.Y);

, события запускаются просто отлично.

Ответы [ 2 ]

3 голосов
/ 16 июля 2011

Если вы не установили Background на холсте, он, похоже, не обращает внимания на события вашей мыши.

Попробуйте:

<Grid>
    <Canvas Name="canvas"
            MouseMove="canvas_MouseMove"
            MouseLeftButtonUp="canvas_MouseLeftButtonUp"
            Background="White" />
</Grid>
0 голосов
/ 19 июля 2011

Не очистив холст, а вместо этого переместив прямоугольник предварительного просмотра в методе mouseMove, решил проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...