首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MouseLeftButtonUp不能在WPF中触发?

为什么MouseLeftButtonUp不能在WPF中触发?
EN

Stack Overflow用户
提问于 2011-07-16 15:27:06
回答 2查看 4.5K关注 0票数 3

为什么我的画布上的MouseLeftButtonUp不能在我的WPF应用程序中触发?下面是XAML:

代码语言:javascript
复制
<Grid Height="300" Width="400">
    <Canvas Name="canvas" MouseMove="canvas_MouseMove" MouseLeftButtonUp="canvas_MouseLeftButtonUp" Background="LightGray"/>
</Grid>

和代码:

代码语言:javascript
复制
    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方法中,如果我使用

代码语言:javascript
复制
 Canvas.SetTop(rect, 50);
 instead of 
 Canvas.SetTop(rect, pos.Y);

事件触发得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-19 22:24:59

通过不清除画布,而是在mouseMove方法中移动预览矩形,解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2011-07-16 15:34:42

如果你没有在画布上设置一个Background,它似乎不会注意到你的鼠标事件。

尝试:

代码语言:javascript
复制
<Grid>
    <Canvas Name="canvas"
            MouseMove="canvas_MouseMove"
            MouseLeftButtonUp="canvas_MouseLeftButtonUp"
            Background="White" />
</Grid>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6716029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档