2010-06-03 29 views

Respuesta

12

Es un poco difícil de diagnosticar el problema sin una muestra de código en cuestión, pero tal vez el problema es que ha intentado agregar el mismo polígono al lienzo 'niños dos veces.

Este es el código que eructar hasta reproducir el error:

type SimpleWindow() as this = 
    inherit Window() 

    do 
     let makepoly size corners = 
      let size = 192.0 
      let angle = 2.0 * Math.PI/float corners 
      let getcoords size angle = new Point(size * cos angle, size * sin angle) 

      let poly = new Polygon(Fill = Brushes.Red) 
      poly.Points <- new PointCollection([for i in 0..corners-1 -> getcoords size (float i * angle)]) 
      poly 

     let canvas = new Canvas(HorizontalAlignment = HorizontalAlignment.Center, 
           VerticalAlignment = VerticalAlignment.Center) 

     let poly = makepoly 192.0 5 
     Canvas.SetLeft(poly, canvas.Width/2.0) 
     Canvas.SetTop(poly, canvas.Width/2.0) 

     canvas.Children.Add poly |> ignore //this works 
     this.AddChild canvas |> ignore 

SimpleWindow().Show() 

Si añado otra canvas.Children.Add poly se bloquea con el mensaje de error.

canvas.Children.Add poly |> ignore 
canvas.Children.Add poly |> ignore //this fails, poly already exists on the canvas 

Con el fin de corregir el error, lo primero que llama canvas.Children.Remove a retirar al niño específico que estaba presente con el fin de reemplazarlo por otro.

canvas.Children.Add poly |> ignore 
canvas.Children.Remove poly 
canvas.Children.Add poly |> ignore //this works, because the previous version is gone 

Espero que esto solucione su problema.

+0

Gracias cfern. Estoy un poco más en WPF ahora. Discúlpate por la respuesta tardía ... –

Cuestiones relacionadas