| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | using System;using System.Collections.Generic;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using OpenSEMI.Controls.Controls;using RecipeEditorLib.DGExtension.CustomColumn;namespace FurnaceUI.Views.Recipes{    /// <summary>    /// Interaction logic for RecipesCompareView.xaml    /// </summary>    public partial class RecipesHistoryCompareView : UserControl    {        private ScrollViewer _stepScrollA;        private ScrollViewer _stepScrollB;        private ScrollViewer _paramScrollA;        private ScrollViewer _paramScrollB;        private ScrollViewer _lineScrollA;        private ScrollViewer _lineScrollB;        public RecipesHistoryCompareView()        {            InitializeComponent();            this.Loaded += RecipesCompareView_Loaded;        }        private void RecipesCompareView_Loaded(object sender, RoutedEventArgs e)        {            _stepScrollA = ScrollViewerFromFrameworkElement(StepGridA);            _stepScrollB = ScrollViewerFromFrameworkElement(StepGridB);            _stepScrollA.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_LeftScrollChanged1);            _stepScrollB.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_RightScrollChanged1);            _paramScrollA = ScrollViewerFromFrameworkElement(ParamGridA);            _paramScrollB = ScrollViewerFromFrameworkElement(ParamGridB);            _paramScrollA.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_LeftScrollChanged2);            _paramScrollB.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_RightScrollChanged2);            _lineScrollA = ScrollViewerFromFrameworkElement(WholeGridA);            _lineScrollB = ScrollViewerFromFrameworkElement(WholeGridB);            _lineScrollA.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_LeftScrollChanged3);            _lineScrollB.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_RightScrollChanged3);        }        private void scrollViewer_RightScrollChanged3(object sender, ScrollChangedEventArgs e)        {            if (Math.Abs(_lineScrollA.VerticalOffset - _lineScrollB.VerticalOffset) > 0.001)            {                _lineScrollA.ScrollToVerticalOffset(_lineScrollB.VerticalOffset);            }            if (Math.Abs(_lineScrollA.HorizontalOffset - _lineScrollB.HorizontalOffset) > 0.001)            {                _lineScrollA.ScrollToHorizontalOffset(_lineScrollB.HorizontalOffset);            }        }        private void scrollViewer_LeftScrollChanged3(object sender, ScrollChangedEventArgs e)        {            if (Math.Abs(_lineScrollB.VerticalOffset - _lineScrollA.VerticalOffset) > 0.001)            {                _lineScrollB.ScrollToVerticalOffset(_lineScrollA.VerticalOffset);            }            if (Math.Abs(_lineScrollB.HorizontalOffset - _lineScrollA.HorizontalOffset) > 0.001)            {                _lineScrollB.ScrollToHorizontalOffset(_lineScrollA.HorizontalOffset);            }        }        void scrollViewer_RightScrollChanged1(object sender, ScrollChangedEventArgs e)        {            if (Math.Abs(_stepScrollA.VerticalOffset - _stepScrollB.VerticalOffset) > 0.001)            {                _stepScrollA.ScrollToVerticalOffset(_stepScrollB.VerticalOffset);            }        }        void scrollViewer_LeftScrollChanged1(object sender, ScrollChangedEventArgs e)        {            if (Math.Abs(_stepScrollB.VerticalOffset - _stepScrollA.VerticalOffset) > 0.001)            {                _stepScrollB.ScrollToVerticalOffset(_stepScrollA.VerticalOffset);            }        }        void scrollViewer_RightScrollChanged2(object sender, ScrollChangedEventArgs e)        {            if (Math.Abs(_paramScrollA.VerticalOffset - _paramScrollB.VerticalOffset) > 0.001)            {                _paramScrollA.ScrollToVerticalOffset(_paramScrollB.VerticalOffset);            }        }        void scrollViewer_LeftScrollChanged2(object sender, ScrollChangedEventArgs e)        {            if (Math.Abs(_paramScrollA.VerticalOffset - _paramScrollB.VerticalOffset) > 0.001)            {                _paramScrollB.ScrollToVerticalOffset(_paramScrollA.VerticalOffset);            }        }        ScrollViewer ScrollViewerFromFrameworkElement(FrameworkElement frameworkElement)        {            if (VisualTreeHelper.GetChildrenCount(frameworkElement) == 0) return null;            FrameworkElement child = VisualTreeHelper.GetChild(frameworkElement, 0) as FrameworkElement;            if (child == null) return null;            if (child is ScrollViewer)            {                return (ScrollViewer)child;            }            return ScrollViewerFromFrameworkElement(child);        }    } }
 |