| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Input;
- namespace Aga.Diagrams
- {
- public static class AutoScrollDecorator
- {
- public static readonly DependencyProperty IsEnabledProperty =
- DependencyProperty.RegisterAttached(
- "IsEnabled",
- typeof(bool),
- typeof(AutoScrollDecorator), new PropertyMetadata(false, IsEnabledValueChanged));
- public static void SetIsEnabled(DependencyObject element, bool value)
- {
- element.SetValue(IsEnabledProperty, value);
- }
- public static bool GetIsEnabled(DependencyObject element)
- {
- return (bool)element.GetValue(IsEnabledProperty);
- }
- public static readonly DependencyProperty SensivityProperty =
- DependencyProperty.RegisterAttached(
- "Sensivity",
- typeof(double),
- typeof(AutoScrollDecorator), new PropertyMetadata(20.0));
- public static void SetSensivity(DependencyObject element, double value)
- {
- element.SetValue(SensivityProperty, value);
- }
- public static double GetSensivity(DependencyObject element)
- {
- return (double)element.GetValue(SensivityProperty);
- }
- public static readonly DependencyProperty StepProperty =
- DependencyProperty.RegisterAttached(
- "Step",
- typeof(double),
- typeof(AutoScrollDecorator), new PropertyMetadata(16.0));
- public static void SetStep(DependencyObject element, double value)
- {
- element.SetValue(StepProperty, value);
- }
- public static double GetStep(DependencyObject element)
- {
- return (double)element.GetValue(StepProperty);
- }
- static void IsEnabledValueChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e)
- {
- var view = depObj as ScrollViewer;
- if (view != null && e.NewValue is bool)
- {
- if ((bool)e.NewValue)
- view.PreviewMouseMove += ViewPreviewMouseMove;
- else
- view.PreviewMouseMove -= ViewPreviewMouseMove;
- }
- }
- private static void ViewPreviewMouseMove(object sender, MouseEventArgs e)
- {
- var _scrollView = sender as ScrollViewer;
- if (_scrollView == null || !(_scrollView.Content is DependencyObject))
- return;
- if (!GetIsEnabled((DependencyObject)_scrollView.Content))
- return;
- var point = e.GetPosition(_scrollView);
- double sensivity = GetSensivity(_scrollView);
- double step = GetStep(_scrollView);
- double dx = 0;
- double dy = 0;
- if (point.X < sensivity)
- dx = -step;
- else if (point.X > _scrollView.ActualWidth - sensivity)
- dx = +step;
- if (point.Y < sensivity)
- dy = -step;
- else if (point.Y > _scrollView.ActualHeight - sensivity)
- dy = +step;
- _scrollView.ScrollToHorizontalOffset(_scrollView.HorizontalOffset + dx);
- _scrollView.ScrollToVerticalOffset(_scrollView.VerticalOffset + dy);
- }
- }
- }
|