2011-12-23 96 views
0

我正在使用WPF創建一個簡單的繪圖應用程序。在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

在elipse上,拖動角落在形狀的邊界之外,在矩形上,拖動角落在形狀的邊界內。可能是鼠標事件沒有正確路由到畫布。

+0

這就是我想要的情況,所以我已經有效地重新調整了像素的大小,現在按預期工作。我也會看看事件路由。謝謝 – 2011-12-23 17:25:32