コード例 #1
0
 private void scrollViewer_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     TimelineCanvas.ReleaseMouseCapture();
 }
コード例 #2
0
        private void ComputeTicks()
        {
            if (this.Navigator == null)
            {
                return;
            }

            var range = this.Mode == TimelineViewMode.ViewRange ? this.Navigator.ViewRange : this.Navigator.DataRange;
            var viewDurationInTicks = range.Duration.Ticks;

            TickZoomLevelDescriptor tickZoomLevelDescriptorMajor = tickZoomLevelDescriptors[0];
            TickZoomLevel           tickZoomLevelMajorLast       = this.tickZoomLevelMajor;

            foreach (var tickZoomLevelDescriptor in tickZoomLevelDescriptors)
            {
                tickZoomLevelDescriptorMajor = tickZoomLevelDescriptor;
                var countSegments = viewDurationInTicks / tickZoomLevelDescriptor.DurationInTicks;
                var segmentWidth  = this.ActualWidth / countSegments;
                if (segmentWidth > 50)
                {
                    break;
                }
            }

            this.tickZoomLevelMajor = tickZoomLevelDescriptorMajor.TickZoomLevel;

            // we've changed zoom levels so reset segments
            if (this.tickZoomLevelMajor != tickZoomLevelMajorLast)
            {
                this.Clear();
            }

            long segmentStart = (range.StartTime.Ticks - this.Navigator.DataRange.StartTime.Ticks) / tickZoomLevelDescriptorMajor.DurationInTicks;
            long segmentEnd   = (range.EndTime.Ticks - this.Navigator.DataRange.StartTime.Ticks) / tickZoomLevelDescriptorMajor.DurationInTicks;

            // remove all unnessary segments (due to scrolling out of view)
            //   segment start + duration < visible start time... no part of segment is visible
            //   or segment start > visible range
            var segmentsToRemove = this.segments.Keys.Where(key => key.Item1 + key.Item2 <range.StartTime || key.Item1> range.EndTime).ToList();

            foreach (var segmentToRemove in segmentsToRemove)
            {
                this.timelineCanvas.Children.Remove(this.segments[segmentToRemove]);
                this.segments.Remove(segmentToRemove);
            }

            for (long segment = segmentStart; segment <= segmentEnd; segment++)
            {
                var startTime = new DateTime(this.Navigator.DataRange.StartTime.Ticks + (segment * tickZoomLevelDescriptorMajor.DurationInTicks));
                var duration  = new TimeSpan(tickZoomLevelDescriptorMajor.DurationInTicks);
                var key       = new Tuple <DateTime, TimeSpan>(startTime, duration);
                if (!this.segments.ContainsKey(key))
                {
                    var ellapsedTime = new TimeSpan(segment * tickZoomLevelDescriptorMajor.DurationInTicks);
                    var label        = ellapsedTime.ToString();
                    var segmentView  = new TimelineSegmentView(this.Mode == TimelineViewMode.DataRange ? VerticalAlignment.Top : VerticalAlignment.Bottom, 10, label);
                    TimelineCanvas.SetStartTime(segmentView, startTime);
                    TimelineCanvas.SetDuration(segmentView, duration);
                    this.segments.Add(key, segmentView);
                    this.timelineCanvas.Children.Add(segmentView);
                }
            }
        }
コード例 #3
0
 private void scrollViewer_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     scrollMousePoint = e.GetPosition(TimelineCanvas);
     hOff             = TimelineOffsetX;
     TimelineCanvas.CaptureMouse();
 }