2012-12-08 13 views
9

Sto tentando di utilizzare un ScrollViewer XAML per aggiungere "a basso costo" zoom-pizzico a un'immagine. Il problema però è che quando si esegue il panning intorno all'immagine, continua a muoversi a sinistra. Se lo faccio scorrere a destra, sembra buono, ma nel momento in cui rilascio l'immagine, torna a sinistra.Uso di ScrollViewer per zoom immagine-pizzico, continua a scattare a sinistra sul pan

Questo problema persiste solo orizzontalmente: per la panoramica verticale, funziona correttamente.

Ho riassunto questo per il caso di test più semplice, e persiste. Il mio codice XAML è il seguente:

<ScrollViewer> 
     <Image Source="http://i.imgur.com/1WlGT.jpg" /> 
    </ScrollViewer> 

Qualsiasi aiuto è apprezzato.

risposta

14

Ho risolto questo.

Il problema è che devi impostare esplicitamente HorizontalScrollBarVisibility su true.

<ScrollViewer x:Name="scrollViewer" 
        VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
        ZoomMode="Enabled"> 
     <Image Source="http://i.imgur.com/1WlGT.jpg" /> 
    </ScrollViewer> 
+1

Questo sembra rompere il dimensionamento iniziale dell'immagine all'interno del ScrollViewer. Senza impostare la visibilità, l'immagine viene ridimensionata per riempire la larghezza orizzontale dello scrollviewer. Dopo aver applicato la soluzione, la visualizzazione iniziale dell'immagine è più grande del contenitore. –

+5

Per chiunque abbia il problema sopra riportato, imposta la larghezza iniziale dell'immagine sulla larghezza della finestra di scorrimento: Image.Width = ImageScrollViewer.ViewportWidth; –

+0

Estendendo questo consiglio, è necessario impostare Image.Width dopo che è stato stabilito il viewport. Ho usato l'evento LayoutUpdated per quello. –

3

Proprio illustrazione della possibile soluzione di ciò che Michal Strzalkowski accennato circa nel suo commento qui sotto la tua risposta, che è immagine che viene mostrata in full size (che non rientrano nei confini del contenitore). quick fix in XAML utilizzando Binding con ElementName e Path

<ScrollViewer x:Name="SV_ImageZoom"   
       MaxZoomFactor="3" 
       MinZoomFactor="1" 
       ZoomMode="Enabled"       
       HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Auto"> 
    <Image Source="http://i.imgur.com/1WlGT.jpg" 
      Width="{Binding Path=ViewportWidth, ElementName=SV_ImageZoom}" /> 
</ScrollViewer> 
Problemi correlati