У меня есть ItemsControl
, который содержит холст внутри ScrollViewer
.Холст большой, и за один раз отображается только его часть.Я хочу программно прокрутить его (пользователь нажимает и перетаскивает холст для прокрутки).Я просмотрел методы ScrollViewer и попробовал следующее в обработчиках событий мыши:
var scrollViewer = (sender) as ScrollViewer;
scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + deltaX);
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + deltaY);
Однако это ничего не делает.Я проверил значения deltaX и deltaY, и они являются действительными значениями (например, 3, 5 и т. Д.).HorizontalOffset
и VerticalOffset
остаются 0 всегда, даже после выполнения вышеуказанных строк.
Вот мой 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>
Любая помощь / предложения приветствуются!