/// <summary> /// Рендеринг временной шкалы и прямоугольника выбранного интервала /// </summary> /// <param name="drawingContext">контекст рисования</param> protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); Size szCellTxt = new Size(6 * (fontSize / 2), RenderSize.Height); Rect rect = new Rect(new Point(btScrollLeft.Width, 0), new Size(RenderSize.Width - btScrollLeft.Width - btScrollRight.Width, RenderSize.Height)); drawingContext.DrawRoundedRectangle(new LinearGradientBrush(new GradientStopCollection() { new GradientStop(Colors.LightGray, 0), new GradientStop(Colors.WhiteSmoke, 0.5), new GradientStop(Colors.LightGray, 1) }, new Point(0, 0), new Point(0, 1)), new Pen(Brushes.DarkGray, 1), new Rect(new Point(0, 0), RenderSize), 5, 5); drawingContext.PushClip(new RectangleGeometry(rect)); /*Левая временная полоса*/ ToolFunctions.DrawVTimeLine(drawingContext, rect.Location, szCellTxt, ToolFunctions.TimeSpanToString(ToolFunctions.GetTimeByPoint(rect.Location, rect.Location, TimeInPoint, LeftTimeBorder)), rect.Height, true, fontSize); /*Правая временная полоса*/ ToolFunctions.DrawVTimeLine(drawingContext, new Point(rect.X + rect.Width, rect.Y), szCellTxt, ToolFunctions.TimeSpanToString(ToolFunctions.GetTimeByPoint(rect.Location, rect.Location, TimeInPoint, RightTimeBorder)), rect.Height, false, fontSize); /*количество временных линий*/ double cnt = (int)(rect.Width / dxTimeLine); double wSmallInterval = rect.Width / cnt; Point linePt = new Point(rect.X + wSmallInterval, rect.Y); /*отрисовка временных линий*/ for (int i = 0; i < (int)cnt - 1; i++) { ToolFunctions.DrawVTimeLine(drawingContext, linePt, szCellTxt, ToolFunctions.TimeSpanToString(ToolFunctions.GetTimeByPoint(linePt, rect.Location, TimeInPoint, LeftTimeBorder)), rect.Height, true, fontSize); linePt.X += wSmallInterval; } drawingContext.PushOpacity(0.5); Rect visibleIntervalRect = new Rect( new Point(rect.X + ToolFunctions.GetDxByTime(VisibilityLeftTimeBorder, TimeInPoint, LeftTimeBorder), 0), new Size(ToolFunctions.GetDxByTime(VisibilityRightTimeBorder, TimeInPoint, LeftTimeBorder) - ToolFunctions.GetDxByTime(VisibilityLeftTimeBorder, TimeInPoint, LeftTimeBorder), rect.Height)); drawingContext.DrawRoundedRectangle(Brushes.LightCoral, new Pen(Brushes.DarkRed, 1), visibleIntervalRect, 5, 5); }
/// <summary> /// Рендеринг шкалы времени /// </summary> /// <param name="dc">контекст рисования</param> protected void Render(DrawingContext dc) { dc.PushOpacity(0.6); /*Левая временная полоса*/ ToolFunctions.DrawVTimeLine(dc, this.Field.Location, SizeCellTimeValue, ToolFunctions.TimeSpanToString(ToolFunctions.GetTimeByPoint(this.Field.Location, this.Field.Location, CommonData.TimeInPoint, CommonData.LeftTime)), this.Field.Height); /*Правая временная полоса*/ ToolFunctions.DrawVTimeLine(dc, new Point(this.Field.X + this.Field.Width, this.Field.Y), SizeCellTimeValue, ToolFunctions.TimeSpanToString(ToolFunctions.GetTimeByPoint(this.Field.Location, this.Field.Location, CommonData.TimeInPoint, CommonData.RightTime)), this.Field.Height, false); /*количество временных линий*/ double cnt = (int)(this.Field.Width / dX_TimeLine); double wSmallInterval = this.Field.Width / cnt; Point linePt = new Point(this.Field.X + wSmallInterval, this.Field.Y); /*отрисовка временных линий*/ for (int i = 0; i < (int)cnt - 1; i++) { ToolFunctions.DrawVTimeLine(dc, linePt, SizeCellTimeValue, ToolFunctions.TimeSpanToString(ToolFunctions.GetTimeByPoint(linePt, this.Field.Location, CommonData.TimeInPoint, CommonData.LeftTime)), this.Field.Height); linePt.X += wSmallInterval; } dc.Pop(); }