Exemplo n.º 1
0
        /// <summary>
        /// 移动时间刻度
        /// </summary>
        /// <param name="frameworkElementMoveX"></param>
        private void MoveTimeScaleUnits(double frameworkElementMoveX)
        {
            if (_timeScalesList.Count == 0)
            {
                return;
            }

            long timeScaleUnitTicks = TimelineHelper.GetScaleUnitTicks(TimeScaleUnit);

            for (int i = _timeScalesList.Count - 1; i >= 0; i--)
            {
                double scaleUnitLeft = frameworkElementMoveX + Canvas.GetLeft(_timeScalesList[i]);
                Canvas.SetLeft(_timeScalesList[i], scaleUnitLeft);

                //移出超过范围的TimeScaleUnit
                if (scaleUnitLeft < -TimeScaleUnitWidth * 3 || scaleUnitLeft > _canvas.ActualWidth + TimeScaleUnitWidth * 2)
                {
                    _canvas.Children.Remove(_timeScalesList[i]);
                    _timeScalesList.RemoveAt(i);
                    continue;
                }
            }

            FrameworkElement firstScaleElement = _timeScalesList.First();
            int frontAddScaleUnitCount         = (int)(Canvas.GetLeft(firstScaleElement) / TimeScaleUnitWidth) + 2;

            for (int i = 0; i < frontAddScaleUnitCount; i++)
            {
                DateTime scaleDateTime = ((DateTime)firstScaleElement.DataContext).AddTicks(-timeScaleUnitTicks);

                FrameworkElement timeScaleUnit = GetTimeScaleUnit();
                timeScaleUnit.DataContext = scaleDateTime;
                timeScaleUnit.SetValue(Canvas.LeftProperty, Canvas.GetLeft(firstScaleElement) - TimeScaleUnitWidth);

                _canvas.Children.Add(timeScaleUnit);
                _timeScalesList.Insert(0, timeScaleUnit);
            }

            int backAddScaleUnitCount = (int)Math.Ceiling((_canvas.ActualWidth - Canvas.GetLeft(_timeScalesList.Last())) / TimeScaleUnitWidth);

            for (int i = 0; i < backAddScaleUnitCount; i++)
            {
                DateTime scaleDateTime = ((DateTime)_timeScalesList.Last().DataContext).AddTicks(timeScaleUnitTicks);

                FrameworkElement timeScaleUnit = GetTimeScaleUnit();
                timeScaleUnit.DataContext = scaleDateTime;
                timeScaleUnit.SetValue(Canvas.LeftProperty, Canvas.GetLeft(_timeScalesList.Last()) + TimeScaleUnitWidth);

                _canvas.Children.Add(timeScaleUnit);
                _timeScalesList.Add(timeScaleUnit);
            }
        }
Exemplo n.º 2
0
        private void UpdateTimelineBandElementsPositionByDateTime(DateTime oldDateTime, DateTime newDateTime)
        {
            long timeScaleUnitTicks = TimelineHelper.GetScaleUnitTicks(TimeScaleUnit);

            //TimelineBand元素水平移动距离
            double frameworkElementMoveX = (oldDateTime - newDateTime).Ticks / (double)timeScaleUnitTicks * TimeScaleUnitWidth;

            //移动时间刻度
            MoveTimeScaleUnits(frameworkElementMoveX);

            //移动时间片段
            MoveTimeFrameElements(frameworkElementMoveX);
        }
Exemplo n.º 3
0
        private void TimelineBand_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            _isDragging = true;
            _dragPoint  = e.GetPosition(null);

            RoutedEventArgs timelineBandStartDragEventArgs = new RoutedEventArgs(TimelineBandStartDragEvent, this);

            RaiseEvent(timelineBandStartDragEventArgs);

            if (e.ClickCount >= 2)
            {
                Point    clickPoint    = e.GetPosition(_canvas);
                DateTime clickDateTime = CurrentDateTime.AddTicks((long)((clickPoint.X - _canvas.ActualWidth / 2) / TimeScaleUnitWidth * TimelineHelper.GetScaleUnitTicks(TimeScaleUnit)));
                TimelineBandDoubleClickEventArgs args = new TimelineBandDoubleClickEventArgs(TimelineBandDoubleClickEvent, this, clickDateTime);

                RaiseEvent(args);
            }

            CaptureMouse();
        }