internal static void DrawText(this DrawingContext dc, FormattedText text, TextPosition textPosition) { //dc.DrawEllipse(Brushes.Black, null, textPosition.Point, 2, 2); // Used to debug if (textPosition.IsTransformed) { dc.PushTransform(textPosition.Transform); } dc.DrawText(text, textPosition.Point); if (textPosition.IsTransformed) { dc.Pop(); } }
protected override void OnRender(DrawingContext dc) { var arc = Arc.Fill(this.RenderSize, this.MinAngle, this.MaxAngle, this.IsDirectionReversed); for (int i = 0; i < this.AllTicks.Count; i++) { var tick = this.AllTicks[i]; var text = this.AllTexts[i]; var angle = TickHelper.ToAngle(tick, this.Minimum, this.Maximum, arc); var point = arc.GetPoint(angle, -this.ReservedSpace / 2 - this.TextSpace / 2); var textPosition = new TextPosition(text, new TextPositionOptions(this.TextOrientation, angle), point, angle); dc.DrawText(text, textPosition); } }
protected override Size MeasureOverride(Size availableSize) { var bounds = new Rect(); var midPoint = new Point(0, 0); var arc = new Arc(midPoint, this.MinAngle, this.MaxAngle, this.ReservedSpace, this.IsDirectionReversed); for (int i = 0; i < this.AllTicks.Count; i++) { var tick = this.AllTicks[i]; var text = this.AllTexts[i]; var angle = TickHelper.ToAngle(tick, this.Minimum, this.Maximum, arc); var point = arc.GetPoint(angle); var textPosition = new TextPosition(text, new TextPositionOptions(this.TextOrientation, angle), point, angle); bounds.Union(textPosition.TransformedBounds); } var points = new[] { bounds.TopLeft, bounds.TopRight, bounds.BottomRight, bounds.BottomLeft }; this.TextSpace = 2 * points.Max(p => (p - midPoint).Length); return bounds.Size; }
protected override void OnRender(DrawingContext dc) { if (this.Foreground == null) { return; } var line = new Line(this.ActualWidth, this.ActualHeight, this.ReservedSpace, this.Placement, this.IsDirectionReversed); for (int i = 0; i < this.AllTicks.Count; i++) { var tick = this.AllTicks[i]; var pos = TickHelper.ToPos(tick, this.Minimum, this.Maximum, line); var text = this.AllTexts[i]; var textPosition = new TextPosition(text, new TextPositionOptions(this.Placement, this.TextOrientation), pos, 0); dc.DrawText(text, textPosition); } }