2015-03-06 9 views
5

Ho un'app di Windows Phone 8.1 con un FlipView. Ogni elemento di FlipView rappresenta una pagina di rivista (pagina PDF resa bitmap con sovrapposizioni).Utilizzo di ScrollViewer all'interno di FlipView

Devo abilitare il pizzico per ingrandire tutte le pagine. Il mio FlipView ItemTemplate assomiglia a questo

<DataTemplate 
     x:Key="SinglePageTemplate"> 
     <ScrollViewer     
      ZoomMode="Enabled"> 
      <Grid> 
       <ProgressRing 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        IsActive="{Binding IsRendered, Converter={StaticResource BooleanNegateConverter}}" /> 
       <Image 
        Source="{Binding Bitmap}" 
        VerticalAlignment="Stretch" 
        HorizontalAlignment="Stretch"> 
       </Image> 
      </Grid> 
     </ScrollViewer> 

Il problema è che quando ho diminuire la pagina e provare a spostarlo verso destra, è sempre "salta" di nuovo a sinistra.

Ecco un video che mostra il problema: https://dl.dropboxusercontent.com/u/73642/fv.avi

Tutte le idee perché e come risolvere il problema?

+0

Penso di sapere cosa sta succedendo qui. Quando si esegue lo zoom indietro completo e si tenta di scorrere, si sta effettivamente scorrendo all'interno dell'oggetto FlipView, invece del contenitore principale. –

+1

Ho avuto un problema molto simile su Windows 8.1. Quasi lo stesso scenario. Ho scoperto che l'impostazione di ScrollBar orizzontale e verticale su Auto su ScrollViewer ha aiutato, ma se la pagina PDF visualizzata è più grande della risoluzione dello schermo (che di solito è, perché lo zoom funzioni correttamente), è stato reso troppo grande. L'altra cosa che ho fatto è stata limitare la larghezza massima della griglia a Window.Current.Bounds.Width e altezza massima a quella stessa larghezza moltiplicata per fattore di scala in base al formato della pagina della tua rivista. E poi ha funzionato. –

+0

Sembra che stia colpendo [punti snap] (https://msdn.microsoft.com/library/windows/apps/br209553), potresti provare a impostare tali proprietà come MandatorySingle o Nessuna –

risposta

0

All'interno della vostra ScrollViewer è necessario attivare manualmente scrollbarvisiblity e modalità

<ScrollViewer ZoomMode="Enabled" 
       HorizontalScrollBarVisibility="Visible" 
       VerticalScrollBarVisibility="Visible" 
       HorizontalScrollMode="Enabled" 
       VerticalScrollMode="Enabled"> 
     <Grid> 
      <ProgressRing 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       IsActive="{Binding IsRendered, Converter={StaticResource BooleanNegateConverter}}" /> 
      <Image 
       Source="{Binding Bitmap}" 
       VerticalAlignment="Stretch" 
       HorizontalAlignment="Stretch"> 
      </Image> 
     </Grid> 
</ScrollViewer> 

Opzionalmente si può anche impostare il Max/MinZoomFactor per evitare Overzoom

0

Ho avuto lo stesso problema. Ho risolto utilizzando un comportamento allegato e impostando HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"

Di seguito è riportato il codice utilizzato per il comportamento allegato

public class PanAndZoomBehavior : Behavior<ScrollViewer> 
    { 
     protected override void OnAttached() 
     { 
      base.OnAttached();    
      Window.Current.SizeChanged += OnSizeChanged; 
      SetElementSize(); 

     } 

     protected override void OnDetaching() 
     { 
      base.OnDetaching();    
      Window.Current.SizeChanged -= OnSizeChanged; 
     } 

     private void OnSizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) 
     { 
      SetElementSize(); 
     } 

     private void SetElementSize() 
     { 
      AssociatedObject.Width = Window.Current.Bounds.Width; 
      AssociatedObject.Height = Window.Current.Bounds.Height; 
      if (AssociatedObject.Content != null) 
      { 
       FrameworkElement element = (FrameworkElement)AssociatedObject.Content; 
       element.Width = Window.Current.Bounds.Width; 
       element.Height = Window.Current.Bounds.Height; 
      } 
     } 

    } 

Applicare questo comportamento per ScrollViewer