Bonjour,
Après de longue recherche, je n'arrive pas à bien maitriser les détails du zoom..
J'arrive à définir les événements à l'aide du toolkit gestureService mais l'utilisateur peut zoomer sur l'image indéfiniment et vice versa.
De ce fait, en utilisant un stackpanel, l'image peut se "balader" à gauche ou à droite de l’écran hors de l’écran. (Embêtant quand même... )
Je voudrais que vous m'aiguilliez sur comment mettre un zoom (rendertransform) minimum et maximum et comment faire pour que tout niveau de zoom, je puisse voir entièrement l'image sur l'écran (en navigant dans le stackpanel bien sur)
Merci
PS mon code Xaml :
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <ListBox ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" Name="listBox1" Margin="12,102,0,0"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" UseLayoutRounding="False" Width="1000" Height="1000" HorizontalAlignment="Center" VerticalAlignment="Center" MaxHeight="1000" MaxWidth="1000"></StackPanel> </ItemsPanelTemplate> </ListBox.ItemsPanel> <Image Height="398" HorizontalAlignment="Left" Margin="10,60,0,0" Name="image1" Stretch="UniformToFill" VerticalAlignment="Top" CacheMode="BitmapCache" Width="444" Source="/MetroLille;component/Images/Metro_tram_Lille.jpg" MaxHeight="700" MaxWidth="700" MinHeight="300"> <Image.RenderTransform> <CompositeTransform x:Name="transform" ScaleX="1" ScaleY="1" /> </Image.RenderTransform> <toolkit:GestureService.GestureListener> <toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" /> </toolkit:GestureService.GestureListener> </Image> </ListBox>
Et C# :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e) { initialScale = transform.ScaleX; } private void OnPinchDelta(object sender, PinchGestureEventArgs e) { if (transform.ScaleX <= 1.7) // -> Test de la limite du zoom { transform.ScaleX = initialScale * e.DistanceRatio; } if (transform.ScaleY <= 1.7) // -> Test de la limite du zoom { transform.ScaleY = initialScale * e.DistanceRatio; }
Partager