2013-10-08 16 views
18

Ho creato la logica che ritaglia un'immagine contenuta all'interno di un bordo che si trova all'interno di una griglia. La griglia ha molti bordi, quindi questa griglia avrà molte immagini. Il problema è che quando zoomo l'immagine la logica ingrandisce l'immagine (che va bene) ma quando uso la logica di ritaglio lo AdornerLayer esce dal bordo come l'immagine: Image zoomed with crop selectorAdornerLayer esce da Border se si ingrandisce l'immagine WPF

Su questa immagine la foto non ha zoom, in modo che il AdornerLayer è corretta: enter image description here

il codice che sto usando per aggiungere il raccolto per l'immagine:

private void AddCropToElement(FrameworkElement fel, System.Drawing.Image img) 
{ 
    if (!cropElements.ContainsKey(Convert.ToString(((Image)fel).Source))) 
    { 
     if (_felCur != null) 
     { 
      RemoveCropFromCur(); 
     } 

     rcInterior = new Rect(
      fel.ActualWidth * 0.2, 
      fel.ActualHeight * 0.2, 
      fel.ActualWidth * 0.6, 
      fel.ActualHeight * 0.6); 
     rectMoving = false; 
     Rect newRect = scaleRect(rcInterior, img); 
     imgCropMove = img; 

     AdornerLayer aly = AdornerLayer.GetAdornerLayer(fel); 
     _clp = new CroppingAdorner(fel, rcInterior); 
     aly.Add(_clp); 
     cropElements.Add(Convert.ToString(((Image)fel).Source), fel); 

     imageCropped = _clp.Crop(new System.Drawing.Bitmap(img), newRect); 


     _clp.CropChanged += HandleCropChanged; 
     _felCur = fel; 
    } 
} 

In questo caso l'oggetto denominato FEL è l'immagine che voglio ritagliare e il Border è il suo genitore.

Come posso risolvere il problema di AdornerLayout che va all'esterno se l'immagine è ingrandita?

+0

Puoi condividere un po 'del codice OnRender del tuo adorner per favore? (o se stai usando xaml adorners condividilo) –

risposta

1

Stai utilizzando Window Adorner predefinito o hai creato un AdornerDecorator personalizzato attorno al tuo bordo in XAML?

<AdornerDecorator> 
    <Border>...</Border> 
</AdornerDecorator> 

Inoltre, se si sta applicando un fattore di zoom sul bordo, è possibile aggiungere una rilegatura sul display rettangolo di ritaglio per abbinare la scala sul vostro oggetto Border.