private void DrawTicks(Canvas canvas, double yPos) { var canvasWidth = canvas.ActualWidth; var timeLineLength = canvasWidth - FingerWidthInUnits; var timeLineStart = HalfFingerWidthInUnits; var minimumDuration = (_timeRange.Duration / timeLineLength) * FingerWidthInUnits; var tickInterval = TickIntervals.GetFirstTickIntervalWithGreaterDuration(minimumDuration); var ticks = tickInterval.GetTicksBetween(_timeRange.Start, _timeRange.End); foreach (var tick in ticks) { var tickXPos = timeLineStart + ((tick.Date - _timeRange.Start) / _timeRange.Duration) * timeLineLength; var tickLine = new Line(); tickLine.X1 = tickXPos; tickLine.Y1 = yPos; tickLine.X2 = tickXPos; tickLine.Y2 = yPos + 4; tickLine.Fill = Brushes.Black; tickLine.Stroke = Brushes.Black; tickLine.StrokeThickness = 2; canvas.Children.Add(tickLine); var tickLabel = new TextBlock(); tickLabel.TextAlignment = TextAlignment.Center; var labelText = tick.ToString(); var pixelsPerDip = VisualTreeHelper.GetDpi(this).PixelsPerDip; var formattedText = new FormattedText( labelText, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, tickLabel.FontFamily.GetTypefaces().First(), tickLabel.FontSize, Brushes.Black, pixelsPerDip ); tickLabel.Text = labelText; tickLabel.SetValue(Canvas.LeftProperty, tickXPos - (formattedText.Width / 2)); tickLabel.SetValue(Canvas.TopProperty, yPos + 4); canvas.Children.Add(tickLabel); } }
private TickInterval GetFirstTickIntervalWithGreaterDuration(Duration duration) { return(TickIntervals.GetFirstTickIntervalWithGreaterDuration(duration)); }