2011-07-16 9 views
2

私のCanvasのMouseLeftButtonUpがWPFアプリケーションで起動しないのはなぜですか?ここ はXAMLです:WPFでMouseLeftButtonUpが起動しないのはなぜですか?

<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); 

イベント火災だけで罰金を使用している場合。

+0

あなたのコードは私にとっては問題ではありません。両方の出来事が解雇された。 –

答えて

0

キャンバスをクリアし、代わりのMouseMoveメソッドでプレビュー矩形を移動しないことでは、問題を解決しました。

3

キャンバスにBackgroundを設定しないと、マウスイベントに注意を払わないようです。

試してみてください。

<Grid> 
    <Canvas Name="canvas" 
      MouseMove="canvas_MouseMove" 
      MouseLeftButtonUp="canvas_MouseLeftButtonUp" 
      Background="White" /> 
</Grid> 
+0

それは修正されません。 mouseMoveが何とかイベントに干渉するようです。 – eflles

+0

@eflles:あなたのグリッドはどんなサイズですか? –

+0

はい。グリッドのサイズは – eflles

関連する問題