AutoScrollHelper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / View / AutoScrollHelper.cs / 1305376 / AutoScrollHelper.cs

                            //---------------------------------------------------------------- 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//---------------------------------------------------------------

namespace System.Activities.Presentation.View 
{
    using System; 
    using System.Windows; 
    using System.Windows.Media;
    using System.Windows.Controls; 
    using System.Windows.Input;

    internal static class AutoScrollHelper
    { 
        const int scrollBuffer = 30;
 
        public static void AutoScroll(MouseEventArgs e, DependencyObject element) 
        {
            FrameworkElement logicalView = element as FrameworkElement; 
            while (element != null)
            {
                element = VisualTreeHelper.GetParent(element);
                if (element != null && element is ScrollViewer) 
                {
                    break; 
                } 
            }
            ScrollViewer scrollViewer = element as ScrollViewer; 
            if (scrollViewer != null)
            {
                AutoScroll(e.GetPosition(scrollViewer), scrollViewer, logicalView != null ? e.GetPosition(logicalView) : (Point?)null, logicalView,
                     25, 25, 1); 
            }
        } 
 
        public static void AutoScroll(DragEventArgs e, ScrollViewer scrollViewer)
        { 
            AutoScroll(e.GetPosition (scrollViewer), scrollViewer, null, null,
                50, 50, 10);
        }
 
        static void AutoScroll(Point positionInScrollViewer, ScrollViewer scrollViewer, Point? positionInLogicalView, FrameworkElement logicalView, double scrollOnDragThresholdX, double scrollOnDragThresholdY, int scrollOnDragOffset)
        { 
            double scrollViewerWidth = scrollViewer.ActualWidth; 
            double scrollViewerHeight = scrollViewer.ActualHeight;
 
            double logicalViewWidth = 0;
            double logicalViewHeight = 0;
            if (logicalView != null)
            { 
                logicalViewWidth = logicalView.ActualWidth;
                logicalViewHeight = logicalView.ActualHeight; 
            } 

            int heightToScroll = 0; 
            int widthToScroll = 0;

            if (positionInScrollViewer.X > (scrollViewerWidth - scrollOnDragThresholdX)
                && (positionInLogicalView == null 
                   || positionInLogicalView.Value.X < (logicalViewWidth - scrollBuffer)))
            { 
                widthToScroll = scrollOnDragOffset; 
            }
            else if (positionInScrollViewer.X < scrollOnDragThresholdX 
                && (positionInLogicalView == null
                   || positionInLogicalView.Value.X > scrollBuffer))
            {
                widthToScroll = -scrollOnDragOffset; 
            }
 
            if (positionInScrollViewer.Y > (scrollViewerHeight - scrollOnDragThresholdY) 
                && (positionInLogicalView == null
                    || positionInLogicalView.Value.Y < logicalViewHeight - scrollBuffer)) 
            {
                heightToScroll = scrollOnDragOffset;
            }
            else if (positionInScrollViewer.Y < scrollOnDragThresholdY 
                && (positionInLogicalView == null
                   || positionInLogicalView.Value.Y > scrollBuffer)) 
            { 
                heightToScroll = -scrollOnDragOffset;
            } 

            if (widthToScroll != 0 || heightToScroll != 0)
            {
                scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + heightToScroll); 
                scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + widthToScroll);
            } 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK