我有一個ItemsControl
,其中包含ScrollViewer
中的畫布。畫布很大,一次只顯示一部分。我想以編程方式滾動它(用戶點擊並拖動畫布滾動)。我查看了ScrollViewer方法,並在鼠標事件處理程序中嘗試了以下操作:WPF以編程方式滾動項目控件中的畫布
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>
任何幫助/建議表示讚賞!
哈哈,答案是在你的XAML。我想我必須明確指定寬度和高度。真棒,謝謝:) – Aishwar 2010-10-05 01:26:03
你不應該真的。在我的xaml中,對我進行這種測試更容易。但是,如果它適合你,那麼就這樣吧。 – 2010-10-05 05:59:48