2011-12-23 120 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