2012-08-07 99 views
3

我在WPF中绘制了SQUARE和其他形状。这样,在wpf中删除矩形/元素

private Rect DrawSquare(Rect bounds, InkCanvas canvas) 
    { 
     Rectangle recta = new Rectangle(); 
     recta.Stroke = Brushes.Black; 
     //recta.Fill = Brushes.Blue; 
     recta.StrokeThickness = 4; 
     recta.Width = bounds.Width; 
     recta.Height = bounds.Height; 
     InkCanvas.SetLeft(recta, bounds.Left); 
     InkCanvas.SetRight(recta, bounds.Right); 
     InkCanvas.SetTop(recta, bounds.Top); 
     canvas.Children.Add(recta); 
     return bounds; 
    } 

,我可以删除随机线与

private void myInkCanvas_SelectionChanging(object sender, InkCanvasSelectionChangingEventArgs e) 
     { 
      else if (toolbarMode == ToolbarMode.Delete) 
      { 
       myInkCanvas.Strokes.Erase(e.GetSelectedStrokes().GetBounds()); //can delete random lines 
       ReadOnlyCollection<UIElement> elements = e.GetSelectedElements(); 
       foreach (UIElement element in elements) 
       { 
        /*String ShapeName = ((System.Windows.Media.Visual)(element)).ToString(); 
        if (ShapeName.Contains("Rectangle")) 
        { 
         Rectangle recta = (Rectangle)element; 
         recta.Fill = Brushes.Blue; 
        }*/ 
        myInkCanvas.Children.Remove(element); //cant delete shapes!!? 
       } 
      } 
    } 

我可以删除随机线,但我不能删除形状

我哪有?

回答

2

您正在使用foreach循环遍历元素集合并同时更改集合。这是不可能的。

您可以通过使用一个for循环解决这个问题(注意,环路的长度可能会改变,由于消除元件)

+0

我想删除所选 随机线(myInkCanvas.Strokes.Erase(E .GetSelectedStrokes()。GetBounds());) 和定义的形状(椭圆,矩形) myInkCanvas.Children.Remove .. ?? – tayfun 2012-08-07 08:25:10

+0

我真的不明白你想要做什么,为什么它不工作。您可以使用删除从画布中删除形状。 – 2012-08-07 10:40:41