J'ai un ItemsControl
qui contient un canevas dans un ScrollViewer
. La toile est grande et seule une partie de celle-ci s'affiche à la fois. Je veux le faire défiler par programmation (l'utilisateur clique et fait glisser la toile pour faire défiler). Je regardais à travers les méthodes ScrollViewer et essayé les éléments suivants dans les gestionnaires d'événements de souris:WPF Défilement programmé d'un canevas dans un contrôle d'articles
var scrollViewer = (sender) as ScrollViewer;
scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + deltaX);
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + deltaY);
Cependant, cela ne fait rien. J'ai vérifié les valeurs de deltaX et deltaY et ce sont des valeurs valides (comme 3, 5 etc.). Les HorizontalOffset
et VerticalOffset
restent 0 à tout moment, même après l'exécution des lignes ci-dessus.
Voici mon XAML:
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
MouseUp="ScrollViewer_MouseUp" MouseMove="ScrollViewer_MouseMove"
PreviewMouseLeftButtonDown="ScrollViewer_PreviewMouseLeftButtonDown" Background="Transparent">
<ItemsControl ItemsSource="{Binding BubbleVMCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- My template here -->
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding AbsoluteLeft}" />
<Setter Property="Canvas.Top" Value="{Binding AbsoluteTop}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</ScrollViewer>
Toute aide/suggestions sont appréciés!
Haha, la réponse est dans votre XAML. Je suppose que je dois spécifier explicitement la largeur et la hauteur. Génial, merci :) – Aishwar
Vous ne devriez pas avoir vraiment. Dans mon xaml, c'était plus facile pour moi de tester de cette façon. Mais si cela fonctionne pour vous, alors faites-le. –