在WPF中.像iPhone一样,如何通过鼠标拖动在ScrollViewer中滚动对象?
问题描述:
通过鼠标滚轮或滚动条进行种子拖动滚动效果很好.但无法通过在滚动视图上通过鼠标拖动内容进行滚动.我该如何执行此操作?
it's done well to scroll by mouse-wheel or scrollbar seed-dragging. but scrolling by mouse-dragging contents on scroll view is not done. How can i implement this action?
<ScrollViewer x:Name="scrollViewer" Grid.Row="1" HorizontalScrollBarVisibility="Auto" CanContentScroll="True">
<Grid x:Name="galleryGrid" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="500"></ColumnDefinition>
<ColumnDefinition Width="500"></ColumnDefinition>
<ColumnDefinition Width="500"></ColumnDefinition>
<ColumnDefinition Width="500"></ColumnDefinition>
<ColumnDefinition Width="500"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Magin="10,10,10,10">Test</Button>
<Button Grid.Column="1" Magin="10,10,10,10">Test</Button>
<Button Grid.Column="2" Magin="10,10,10,10">Test</Button>
<Button Grid.Column="3" Magin="10,10,10,10">Test</Button>
<Button Grid.Column="4" Magin="10,10,10,10">Test</Button>
</Grid>
</ScrollViewer>
答
我找到了解决此问题的方法.正在关注...
I found a way of resolving this. It's following...
Point scrollMousePoint = new Point();
double hOff = 1;
private void scrollViewer_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
scrollMousePoint = e.GetPosition(scrollViewer);
hOff = scrollViewer.HorizontalOffset;
scrollViewer.CaptureMouse();
}
private void scrollViewer_PreviewMouseMove(object sender, MouseEventArgs e)
{
if(scrollViewer.IsMouseCaptured)
{
scrollViewer.ScrollToHorizontalOffset(hOff + (scrollMousePoint.X - e.GetPosition(scrollViewer).X));
}
}
private void scrollViewer_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
scrollViewer.ReleaseMouseCapture();
}
private void scrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + e.Delta);
}
谢谢!