2011-12-23 23 views
0

私はWPFを使用して簡単な描画アプリケーションを作成しています。キャンバスコントロールでmouse_upイベントを使用すると、私はいくつかの奇妙な動作に遭遇しました。Canvas Mouse Upイベント異常な動作

私が望む効果は、ユーザーがキャンバスをクリックしてマウスをドラッグすると、選択した図形が拡大することです。ユーザーがマウスボタンを離すと、そのままの形になります。私はそれのような、楕円で細かい作業をしている:

//Calculate width and height based on difference from start and current mouse positions 
      int width = currentXPosition < StartXPosition ? StartXPosition - currentXPosition : currentXPosition - StartXPosition; 
      int height = currentYPosition < StartYPosition ? StartYPosition - currentYPosition : currentYPosition - StartYPosition; 

      StandardEllipse ellipse = new StandardEllipse 
      { 
       Fill = new SolidColorBrush(Colors.Blue), 
       Stroke = new SolidColorBrush(Colors.Blue), 
       StrokeThickness = 2, 
       Width = width, 
       Height = height 
      }; 

      //Calculate and set the starting positions of the ellipse for the drawing canvas 
      int left = currentXPosition < StartXPosition ? currentXPosition : StartXPosition; 
      int top = currentYPosition < StartYPosition ? currentYPosition : StartYPosition; 
      Canvas.SetLeft(ellipse, left); 
      Canvas.SetTop(ellipse, top); 

      return ellipse; 

しかし、私は離れて散発的に、マウスアップイベントが発生する矩形に形状を設定することから、上記と全く同じコードを使用して、長方形をしようとすると、イベントを発生させるまで、何度もマウスボタンをクリックしなければなりません。

mouse_moveイベントとmouse_upイベントの間に何らかの矛盾があるかどうかはわかりませんが、楕円の代わりに矩形を返す以外は、他のコードとまったく同じように見えません。

編集:私が四角形を描いているとき、マウスが厳密に形状の端を超えているので、幅と高さを99%に設定しようとしましたが、大丈夫です今すぐ!誰かが洞察力を持っているなら、私は感謝するでしょう。

答えて

0

エリープでは、ドラッグコーナーがシェイプの境界の外側にあり、ドラッグコーナーはシェイプの境界内にあります。マウスイベントがキャンバスに正しくルーティングされていない可能性があります。

+0

これは私が事件を考えていたので、実際に期待どおりに動作するピクセルで形状を効果的にサイズ変更しました。イベントルーティングについても見ていきます。ありがとう –

関連する問題