2010-06-03 36 views

risposta

12

E 'un po' difficile da diagnosticare il problema senza un esempio di codice in questione, ma forse il problema è che si è tentato di aggiungere lo stesso poligono alla tela 'bambini due volte.

Questo è il codice che ruttino fino a riprodurre il vostro errore:

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() 

Se aggiungo un'altra canvas.Children.Add poly si blocca con il messaggio di errore.

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

Al fine di correggere l'errore, ho chiamato canvas.Children.Remove per rimuovere il bambino specifico che era presente al fine di sostituirlo con un altro.

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

Spero che questo risolva il problema.

+0

Grazie cfern. Ora ho un po 'di più su WPF. Chiedere scusa per una risposta tardiva ... –

Problemi correlati