void canvas_PreviewMouseUp(object sender, MouseButtonEventArgs e)
 {
     if (dragInfo is NoArea)
     {
         return;
     }
     e.Handled = true;
     canvas.ReleaseMouseCapture();
     dragInfo = new NoArea();
 }
		void canvas_PreviewMouseUp(object sender, MouseButtonEventArgs e)
		{
			if (dragInfo is NoArea) return;
			e.Handled = true;
			canvas.ReleaseMouseCapture();
			dragInfo = new NoArea();
		}
 void canvas_MouseDown(object sender, MouseButtonEventArgs e)
 {
     if (Keyboard.Modifiers == ModifierKeys.None)
     {
         e.Handled = true;
         var startPoint = e.GetPosition(canvas);
         if (dragInfo is NoArea)
         {
             if (circleButton.IsChecked == true)
             {
                 // create circle
                 canvas.CaptureMouse();
                 var area = new Cylinder {
                     X = startPoint.X, Y = startPoint.Y, R = 0
                 };
                 var info = AddCylinder(area);
                 dragInfo = info;
                 Region.Areas.Add(info.Area);
             }
             else if (rectangleButton.IsChecked == true)
             {
                 // create rectangle
                 canvas.CaptureMouse();
                 var area = new RectangularArea {
                     X = startPoint.X, Y = startPoint.Y, Height = 0, Width = 0
                 };
                 var info = AddRectangle(area);
                 dragInfo = info;
                 Region.Areas.Add(info.Area);
             }
             else if (deleteButton.IsChecked == true && e.Source is Shape)
             {
                 // delete shape
                 foreach (var info in areaInfos.ToArray())
                 {
                     // remove area
                     var circleDragInfo = info as CircleDragInfo;
                     if (circleDragInfo != null &&
                         (circleDragInfo.Center == e.Source || circleDragInfo.Circle == e.Source))
                     {
                         areaInfos.Remove(circleDragInfo);
                         Region.Areas.Remove(circleDragInfo.Area);
                         canvas.Children.Remove(circleDragInfo.Center);
                         canvas.Children.Remove(circleDragInfo.Circle);
                     }
                     var rectangleDragInfo = info as RectangleDragInfo;
                     if (rectangleDragInfo != null && (rectangleDragInfo.Rectangle == e.Source))
                     {
                         areaInfos.Remove(rectangleDragInfo);
                         Region.Areas.Remove(rectangleDragInfo.Area);
                         canvas.Children.Remove(rectangleDragInfo.Rectangle);
                     }
                     if (info is NoArea)
                     {
                         throw new Exception("NoArea should not be in the list");
                     }
                 }
             }
         }
     }
 }
		void canvas_MouseDown(object sender, MouseButtonEventArgs e)
		{
			if (Keyboard.Modifiers == ModifierKeys.None)
			{
				e.Handled = true;
				var startPoint = e.GetPosition(canvas);
				if (dragInfo is NoArea)
				{
					if (circleButton.IsChecked == true)
					{
						// create circle
						canvas.CaptureMouse();
						var area = new Cylinder { X = startPoint.X, Y = startPoint.Y, R = 0 };
						var info = AddCylinder(area);
						dragInfo = info;
						Region.Areas.Add(info.Area);
					}
					else if (rectangleButton.IsChecked == true)
					{
						// create rectangle
						canvas.CaptureMouse();
						var area = new RectangularArea { X = startPoint.X, Y = startPoint.Y, Height = 0, Width = 0 };
						var info = AddRectangle(area);
						dragInfo = info;
						Region.Areas.Add(info.Area);
					}
					else if (deleteButton.IsChecked == true && e.Source is Shape)
					{
						// delete shape
						foreach (var info in areaInfos.ToArray())
						{
							// remove area
							var circleDragInfo = info as CircleDragInfo;
							if (circleDragInfo != null &&
								(circleDragInfo.Center == e.Source || circleDragInfo.Circle == e.Source))
							{
								areaInfos.Remove(circleDragInfo);
								Region.Areas.Remove(circleDragInfo.Area);
								canvas.Children.Remove(circleDragInfo.Center);
								canvas.Children.Remove(circleDragInfo.Circle);
							}
							var rectangleDragInfo = info as RectangleDragInfo;
							if (rectangleDragInfo != null && (rectangleDragInfo.Rectangle == e.Source))
							{
								areaInfos.Remove(rectangleDragInfo);
								Region.Areas.Remove(rectangleDragInfo.Area);
								canvas.Children.Remove(rectangleDragInfo.Rectangle);
							}
							if (info is NoArea) throw new Exception("NoArea should not be in the list");
						}
					}
				}
			}
		}