double UpdateSegment(double start, double end, RulerSegment rulerSegment, double run, ref double trans) { double segmentWidth = _segmentWidth; if (run == start) { rulerSegment.StartValue = (Math.Floor((double)(start / segmentWidth)) * segmentWidth) / Scale; run = rulerSegment.StartValue * Scale; } else if (run <= end) { rulerSegment.StartValue = run / Scale; } rulerSegment.SegmentWidth = segmentWidth; if (Orientation == Orientation.Horizontal) { rulerSegment._mTranslateTransform.X = trans; } else { rulerSegment._mTranslateTransform.Y = trans; } trans += rulerSegment.PxSegmentWidth; run += segmentWidth; return(run); }
void UpdateSegments(double start, double end) { double run = start; double trans = 0.0; foreach (RulerSegment segment in _canvas.Children) { run = UpdateSegment(start, end, segment, run, ref trans); } while (run < end) { RulerSegment newSegment = new RulerSegment(); newSegment.Ruler = this; _canvas.Children.Add(newSegment); run = UpdateSegment(start, end, newSegment, run, ref trans); } }