




















public class ScrollViewerMouseMiddleButtonDragToScrollBehavior : Behavior<UIElement>
{
ScrollViewer target;
private Point? _startPoint;
protected override void OnAttached()
{
base.OnAttached();
target = AssociatedObject as ScrollViewer;
AssociatedObject.MouseMove += AssociatedObject_MouseMove;
AssociatedObject.MouseDown += AssociatedObject_MouseDown;
AssociatedObject.MouseUp += AssociatedObject_MouseUp;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.MouseMove -= AssociatedObject_MouseMove;
AssociatedObject.MouseDown -= AssociatedObject_MouseDown;
AssociatedObject.MouseUp -= AssociatedObject_MouseUp;
}
private void AssociatedObject_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.MiddleButton == MouseButtonState.Pressed)
{
_startPoint = e.GetPosition(AssociatedObject);
Mouse.OverrideCursor = Cursors.ScrollAll; // 設定鼠標為拖動光標
Mouse.Capture(AssociatedObject);
}
}
private void AssociatedObject_MouseMove(object sender, MouseEventArgs e)
{
if (_startPoint.HasValue && e.MiddleButton == MouseButtonState.Pressed)
{
Point currentPoint = e.GetPosition(AssociatedObject);
Vector offset = currentPoint - _startPoint.Value;
_startPoint = currentPoint;
target.ScrollToHorizontalOffset(target.HorizontalOffset - offset.X);
target.ScrollToVerticalOffset(target.VerticalOffset - offset.Y);
}
}
private void AssociatedObject_MouseUp(object sender, MouseButtonEventArgs e)
{
if (e.MiddleButton == MouseButtonState.Released)
{
_startPoint = null;
Mouse.OverrideCursor = null; // 恢復為默認光標
Mouse.Capture(null);
}
}
}
使用方法:
Interaction.GetBehaviors(scrollviewer).Add(new ScrollViewerMouseMiddleButtonDragToScrollBehavior());
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。