Ciao a tutti,

sono un novizio nella programmazione complessa, ma con buona volontà. Sto cercando di creare un'applicazione per windows phone. Prima di tutto sono dell'idea che tutto il codice di cui ho bisogno esiste già da qualche parte su internet, ma al momento, dopo varie ricerche non ho trovato nulla che mi servisse.

una parte della mia applicazione prevede il crop di una immagine selezionata dalla libreria delle foto o da una foto appena scattata. fin qui facile, ho trovato un samples che fa proprio questo.
in base ad una selezione fatta con il touch visivamente viene creato un rettangolo che rappresenta il contorno dell'immagine finale (quella croppata) che successivamente viene storata.

quello che vorrei fare io e ulteriore modifica a questo samples, ovvero la possibilità di creare più crop per una stessa immagine.

l'idea è: disegno il rettagolo, confermo, schiatto un tasto di add e creo un altro rettangolo. infine farà tante immagini quanti sono i rettangoli (per semplicità diciamo che l'utente potrà creare al massimo due ulteriori immagini).

ho provato e riprovato, ma evidentemente mi sfugge qualche cosa.


per prima cosa ho creato due rettangoli in xaml del tipo

codice:
 <Rectangle x:Name="rect" Visibility="Collapsed" 
Stroke="Black" StrokeThickness="5" ></Rectangle>                 
<Rectangle x:Name="rect2" Visibility="Collapsed" 
Stroke="Black" StrokeThickness="5" ></Rectangle>
in seguito ho usato due eventi per gestire la renderizzazione
codice:
AddHandler CompositionTarget.Rendering, AddressOf CompositionTarget_Rendering         
AddHandler CompositionTarget.Rendering, AddressOf CompositionTarget_Rendering2
dopodichè gestisco le coordinate con gli eventi del mouse
codice:
Private Sub CropImage_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
   If cropping = False Then
      p1 = e.GetPosition(DisplayedImageElement)
      p2 = p1             
      rect.Visibility = Visibility.Visible             
     'rect2.Visibility = Visibility.Visible         
     Else
       p1 = e.GetPosition(DisplayedImageElement)
       p2 = p1            
       'rect.Visibility = Visibility.Visible             
       rect2.Visibility = Visibility.Visible         
  End If         
cropping = True     
End Sub
dove le costanti dovrebbero essere indirizzarmi nella gestione di uno e l'altro rettangolo.

le coordinate finali
codice:
Private Sub CropImage_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)         
p2 = e.GetPosition(DisplayedImageElement)     
End Sub
codice:
Private Sub CropImage_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)         
p2 = e.GetPosition(DisplayedImageElement)         
cropping = False       
End Sub
infine il rendering dei rettangoli (la variazione di coordinate (+20) la spiego in seguito

codice:
Private Sub CompositionTarget_Rendering(ByVal sender As Object, ByVal e As EventArgs)         
If cropping Then
     p3 = p1
     p4 = p2             
     rect.SetValue(canvas.LeftProperty, If(p3.X < p4.X, p3.X, p4.X))      
     rect.SetValue(canvas.TopProperty, If(p3.Y < p4.Y, p3.Y, p4.Y))  
     rect.Width = CInt(Fix(Math.Abs(p4.X - p3.X)))            
     rect.Height = CInt(Fix(Math.Abs(p4.Y - p3.Y)))             
     cropping2 = True        
End If     
End Sub      
Private Sub CompositionTarget_Rendering2(ByVal sender As Object, ByVal e As EventArgs)         
If cropping2 Then
     rect2.SetValue(canvas.LeftProperty, If(p1.X < p2.X, p1.X + 20, p2.X + 20))                
     rect2.SetValue(canvas.TopProperty, If(p1.Y < p2.Y, p1.Y + 20, p2.Y + 20))              
     rect2.Width = CInt(Fix(Math.Abs(p2.X - p1.X))) + 20             
     rect2.Height = CInt(Fix(Math.Abs(p2.Y - p1.Y))) + 20         
End If     
End Sub
la variazione di coordinate le ho inserite per rendermi conto dell'effetto.

il problemi sono due.
1. mi vengono creati conteporaneamente due rettangoli (per questo il +20, altrimenti non avrei avuto visione)
2. se provo a disegnare un ulteriore rettangolo i primi 2 (che dovrebbe essere uno solo) scompaiono.

qualcuno mi può dare qualche dritta su come poter risolvere questo problema??

grazie mille =)