2017-09-28 4 views
0

J'ai créé un contrôle utilisateur Wpf qui affiche l'image de l'utilisateur et permet également à l'utilisateur d'agrandir ou de réduire l'image à l'aide du défilement de la souris.Il utilise le contrôle scrollviewer pour autoriser le défilement. Scrollviewer fonctionne correctement lorsque la taille de l'image est supérieure à celle de son conteneur. Mais lorsque la taille de l'image est inférieure à celle du conteneur, les parchemins ne disparaissent pas. Alors, comment faire disparaître les parchemins si l'image peut tenir dans le conteneur. Ci-dessous le XAML J'utilise:Comment faire pour Wpf scrollviewer ajuster selon la mise à l'échelle de l'image?

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <Grid Grid.Row="0"> 
      <!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">--> 
      <Image x:Name="PdfImage" RenderTransformOrigin="0.5,0.5" MouseWheel="PdfImage_MouseWheel" ClipToBounds="True"> 
       <Image.RenderTransform> 
        <ScaleTransform x:Name="scale" ScaleX="1" ScaleY="1" CenterX="0.5" CenterY="0.5" /> 
       </Image.RenderTransform> 
      </Image> 
      <!--</ScrollViewer>--> 
     </Grid> 
    </ScrollViewer> 

Voici le code que j'utilise pour permettre à l'utilisateur de zoomer ou de l'image sur:

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) 
{ 
        var st = (ScaleTransform)PdfImage.RenderTransform; 
        double zoom = e.Delta > 0 ? .2 : -.2; 
        double newXScaleValue = st.ScaleX + zoom; 
        double newYScaleValue = st.ScaleY + zoom; 
        if ((newXScaleValue >= 0.1 && newXScaleValue <= 4) && (newYScaleValue >= 0.1 && newYScaleValue <= 4)) 
        { 
         st.ScaleX += zoom; 
         st.ScaleY += zoom; 
        } 
} 
+0

Pouvez-vous également ajouter du code 'PdfImage_MouseWheel'? Pourquoi incluez-vous le scrollviewer interne (et la grille)? – Sinatr

+0

@Sinatr J'ai ajouté le code. Et j'ai essayé d'ajouter scrollviewer directement sur Image et sur sa grille parente, les deux ne fonctionnaient pas. –

+0

Votre barre de défilement disparaît-elle lorsque l'image (à sa taille initiale) correspond au ScrollViewer? –

Répondre

1

Vous appliquez un render transform. Ce type de transformation est appliqué après la mesure et organise les étapes et est indépendant de la mise en page. Du point de vue du visualiseur de défilement, la largeur et la hauteur du contenu ne changent jamais, quel que soit le degré de zoom avant ou arrière. Essayez d'utiliser Image.LayoutTranform à la place.