internal override void Arrange(RadRect availableRect) { // arrange title double titleTop = 0d; if (this.owner.VerticalLocation == AxisVerticalLocation.Bottom) { titleTop = availableRect.Bottom - this.owner.title.desiredSize.Height; } else { titleTop = availableRect.Y; availableRect.Y += this.owner.title.desiredSize.Height; } this.owner.title.Arrange(new RadRect( availableRect.X + ((availableRect.Width - this.owner.title.desiredSize.Width) / 2), titleTop, this.owner.title.desiredSize.Width, this.owner.title.desiredSize.Height)); // scale by the zoom factor availableRect.Width *= this.owner.GetChartArea().view.ZoomWidth; // arrange ticks double x; double y; if (this.owner.VerticalLocation == AxisVerticalLocation.Bottom) { y = availableRect.Y; } else { y = availableRect.Y + this.totalLabelHeight + this.owner.LineThickness; } double thickness = this.owner.TickThickness; double thicknessOffset = (int)(thickness / 2); foreach (AxisTickModel tick in this.owner.ticks) { if (tick.normalizedValue == 0) { x = availableRect.X - thicknessOffset; } else if (tick.normalizedValue == 1) { x = availableRect.X + availableRect.Width; } else { x = availableRect.X + ((double)tick.normalizedValue * availableRect.Width) - thicknessOffset; } tick.Arrange(new RadRect(x, y, thickness, this.owner.GetTickLength(tick))); } // arrange labels if (this.owner.VerticalLocation == AxisVerticalLocation.Bottom) { this.labelTop = availableRect.Y + this.owner.MajorTickLength; } else { this.labelTop = availableRect.Y; } LabelArranger labelFitStrategy = this.ArrangeLabelNone; if (this.owner.labelFitMode == AxisLabelFitMode.MultiLine) { labelFitStrategy = this.ArrangeLabelMultiline; } foreach (AxisLabelModel label in this.owner.labels) { labelFitStrategy(label, availableRect); } }
void Render() { if (!_loaded || UpdateCount > 0) { return; } if (Chart != null) { var prect = Chart.View.PlotRect; var bnds = new Rect(0, 0, prect.Width, prect.Height); bnds.Inflate(1, 1); var offset = Chart.TranslatePoint(new Point(), (UIElement)this.Parent); offset.X = prect.X - offset.X; offset.Y = prect.Y - offset.Y; foreach (var label in Children) { if (!base.Children.Contains(label)) { base.Children.Add(label); } var line = label.ConnectingLine; if (!base.Children.Contains(line)) { base.Children.Add(line); } if (!Chart.ChartType.ToString().StartsWith("Pie")) { label.UpdateAttachPoint(Chart, offset); if (bnds.Contains(label.AttachPoint)) { label.Visibility = Visibility.Visible; } else { label.Visibility = Visibility.Collapsed; } } else { label.UpdateAttachPoint(Chart, new Point()); } } if (LabelArranger != null) { LabelArranger.Arrange(Children.ToArray(), OccupiedRects, new Rect(0, 0, prect.Width, prect.Height)); } foreach (var label in Children) { var line = label.ConnectingLine; var pt = label.AttachPoint; line.X1 = pt.X; line.Y1 = pt.Y; var pt1 = LabelHelper.GetConnectingPoint(label); if (!double.IsNaN(pt1.X) && !double.IsNaN(pt1.Y)) { line.X2 = pt1.X; line.Y2 = pt1.Y; } } _state = new ChartState(Chart); } }