private void PlaceLabel(string text, AxisCore axis, AxisOrientation source) { _label.Text = text; var formattedText = new FormattedText( _label.Text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface(_label.FontFamily, _label.FontStyle, _label.FontWeight, _label.FontStretch), _label.FontSize, Brushes.Black); var transform = new LabelEvaluation(axis.View.LabelsRotation, formattedText.Width + 10, formattedText.Height, axis, source); _label.RenderTransform = Math.Abs(transform.LabelAngle) > 1 ? new RotateTransform(transform.LabelAngle) : null; var toLine = ChartFunctions.ToPlotArea(Value + SectionOffset + SectionWidth * .5, source, Model.Chart, axis); var direction = source == AxisOrientation.X ? 1 : -1; toLine += axis.EvaluatesUnitWidth ? direction * ChartFunctions.GetUnitWidth(source, Model.Chart, axis) / 2 : 0; var toLabel = toLine + transform.GetOffsetBySource(source); var chart = Model.Chart; if (axis.IsMerged) { const double padding = 4; if (source == AxisOrientation.Y) { if (toLabel + transform.ActualHeight > chart.DrawMargin.Top + chart.DrawMargin.Height) { toLabel -= transform.ActualHeight + padding; } } else { if (toLabel + transform.ActualWidth > chart.DrawMargin.Left + chart.DrawMargin.Width) { toLabel -= transform.ActualWidth + padding; } } } var labelTab = axis.Tab; labelTab += transform.GetOffsetBySource(source.Invert()); if (source == AxisOrientation.Y) { labelTab += 8 * (axis.Position == AxisPosition.LeftBottom ? 1 : -1); if (Model.View.DisableAnimations || DisableAnimations) { Canvas.SetLeft(_label, labelTab); Canvas.SetTop(_label, toLabel); return; } _label.BeginAnimation(Canvas.TopProperty, new DoubleAnimation(toLabel, chart.View.AnimationsSpeed)); _label.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation(labelTab, chart.View.AnimationsSpeed)); } else { if (Model.View.DisableAnimations || DisableAnimations) { Canvas.SetLeft(_label, toLabel); Canvas.SetTop(_label, labelTab); return; } _label.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation(toLabel, chart.View.AnimationsSpeed)); _label.BeginAnimation(Canvas.TopProperty, new DoubleAnimation(labelTab, chart.View.AnimationsSpeed)); } }
private void PlaceLabel(string text, AxisCore axis, AxisOrientation source) { _label.Text = text; _label.UpdateLayout(); var transform = new LabelEvaluation(axis.View.LabelsRotation, _label.Width + 10, _label.Height, axis, source); _label.RenderTransform = Math.Abs(transform.LabelAngle) > 1 ? new RotateTransform { Angle = transform.LabelAngle } : null; var toLine = ChartFunctions.ToPlotArea(Value, source, Model.Chart, axis); var direction = source == AxisOrientation.X ? 1 : -1; toLine += axis.EvaluatesUnitWidth ? direction * ChartFunctions.GetUnitWidth(source, Model.Chart, axis) / 2 : 0; var toLabel = toLine + transform.GetOffsetBySource(source); var chart = Model.Chart; if (axis.IsMerged) { const double padding = 4; if (source == AxisOrientation.Y) { if (toLabel + transform.ActualHeight > chart.DrawMargin.Top + chart.DrawMargin.Height) { toLabel -= transform.ActualHeight + padding; } } else { if (toLabel + transform.ActualWidth > chart.DrawMargin.Left + chart.DrawMargin.Width) { toLabel -= transform.ActualWidth + padding; } } } var labelTab = axis.Tab; labelTab += transform.GetOffsetBySource(source.Invert()); if (source == AxisOrientation.Y) { if (Model.View.DisableAnimations || DisableAnimations) { Canvas.SetLeft(_label, labelTab); Canvas.SetTop(_label, toLabel); return; } _label.BeginDoubleAnimation("Canvas.Top", toLabel, chart.View.AnimationsSpeed); _label.BeginDoubleAnimation("Canvas.Left", labelTab, chart.View.AnimationsSpeed); } else { if (Model.View.DisableAnimations || DisableAnimations) { Canvas.SetLeft(_label, toLabel); Canvas.SetTop(_label, labelTab); return; } _label.BeginDoubleAnimation("Canvas.Left", toLabel, chart.View.AnimationsSpeed); _label.BeginDoubleAnimation("Canvas.Top", labelTab, chart.View.AnimationsSpeed); } }