private void scrollViewer_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { TimelineCanvas.ReleaseMouseCapture(); }
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); } } }
private void scrollViewer_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { scrollMousePoint = e.GetPosition(TimelineCanvas); hOff = TimelineOffsetX; TimelineCanvas.CaptureMouse(); }