private void Thumb_DragDelta(object sender, DragDeltaEventArgs e) { GanttChartView ganttChartView; ScrollViewer scrollViewer; GanttChartItem dataContext = this.Thumb.DataContext as GanttChartItem; if (dataContext != null) { ganttChartView = dataContext.GanttChartView as GanttChartView; if ((ganttChartView != null) && !dataContext.HasChildren) { this.horizontalChange = e.HorizontalChange; scrollViewer = ganttChartView.ScrollViewer; if (!this.isDuringInternalScrollOperation) { double x = this.originalHorizontalPosition + this.horizontalChange; double itemHeight = ganttChartView.ItemHeight; Point p = new Point(x, 0.0); this.isDuringInternalScrollOperation = true; base.Dispatcher.BeginInvoke((Action)(() => { double previousHorizontalOffset = scrollViewer.HorizontalOffset; ScrollContentPresenter visual = ganttChartView.ScrollContentPresenter; if ((scrollViewer != null) && (visual != null)) { try { p = this.TransformToVisual(visual).Transform(p); if (p.X < itemHeight) { scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset - itemHeight); } if (p.X > (scrollViewer.ViewportWidth - itemHeight)) { scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + itemHeight); } } catch { } } this.Dispatcher.BeginInvoke((Action)(() => { this.originalHorizontalPosition -= scrollViewer.HorizontalOffset - previousHorizontalOffset; this.isDuringInternalScrollOperation = false; })); })); } switch (this.Role) { case DragTaskThumbRole.UpdateFinish: if (!dataContext.IsMilestone) { double num3 = ganttChartView.GetPosition(dataContext.Finish) + e.HorizontalChange; dataContext.Finish = ganttChartView.GetPreviousVisibleWorkingTime(ganttChartView.GetUpdateScaleTime(ganttChartView.GetDateTime(num3))); return; } return; case DragTaskThumbRole.UpdateCompletedFinish: if (!dataContext.IsMilestone) { double num4 = ganttChartView.GetPosition(dataContext.CompletedFinish) + e.HorizontalChange; dataContext.CompletedFinish = ganttChartView.GetPreviousVisibleWorkingTime(ganttChartView.GetUpdateScaleTime(ganttChartView.GetDateTime(num4))); return; } return; } double position = ganttChartView.GetPosition(dataContext.Start) + e.HorizontalChange; TimeSpan effort = dataContext.Effort; TimeSpan completedEffort = dataContext.CompletedEffort; dataContext.Start = ganttChartView.GetNextVisibleWorkingTime(ganttChartView.GetUpdateScaleTime(ganttChartView.GetDateTime(position))); if (!dataContext.IsMilestone) { dataContext.Effort = effort; dataContext.CompletedEffort = completedEffort; } } } }