using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Tango.Visuals.Components { /// /// Interaction logic for YAxisLabels.xaml /// internal partial class XAxisLabels : UserControl { #region Constructors /// /// Initializes a new instance of the class. /// public XAxisLabels() { InitializeComponent(); this.Loaded += YAxisLabels_Loaded; } #endregion #region Properties /// /// Gets or sets the labels. /// /// /// The labels. /// public ObservableCollection Labels { get { return (ObservableCollection)GetValue(LabelsProperty); } set { SetValue(LabelsProperty, value); } } public static readonly DependencyProperty LabelsProperty = DependencyProperty.Register("Labels", typeof(ObservableCollection), typeof(XAxisLabels), new PropertyMetadata(new ObservableCollection())); /// /// Gets or sets the label template. /// /// /// The label template. /// public DataTemplate LabelTemplate { get { return (DataTemplate)GetValue(LabelTemplateProperty); } set { SetValue(LabelTemplateProperty, value); } } public static readonly DependencyProperty LabelTemplateProperty = DependencyProperty.Register("LabelTemplate", typeof(DataTemplate), typeof(XAxisLabels), new PropertyMetadata(null)); #endregion #region Event Handlers private void YAxisLabels_Loaded(object sender, RoutedEventArgs e) { DrawLabels(); } #endregion #region Methods /// /// Draws the labels. /// private void DrawLabels() { grid.ColumnDefinitions.Clear(); grid.Children.Clear(); grid.ClipToBounds = false; if (Labels == null) return; for (int i = 0; i < Labels.Count; i++) { if (i == Labels.Count - 1) { var container = AddLabel(Labels[i].ToString(), i); container.HorizontalAlignment = System.Windows.HorizontalAlignment.Right; grid.Children.Add(container); container.Loaded += (x, y) => { container.Margin = new Thickness(0, 0, (container.ActualHeight / 2) * -1, 0); }; } else { ColumnDefinition column = new ColumnDefinition(); column.Width = new GridLength(1, GridUnitType.Star); grid.ColumnDefinitions.Add(column); var container = AddLabel(Labels[i].ToString(), i); grid.Children.Add(container); container.Loaded += (x, y) => { container.Margin = new Thickness((container.ActualHeight / 2) * -1, 0, 0, 0); }; } } } /// /// Adds the label. /// /// The text. /// The index. /// private ContentControl AddLabel(String text, int index) { ContentControl label = new ContentControl(); label.Content = text; label.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; label.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; label.LayoutTransform = new RotateTransform(270); Grid.SetColumn(label, index); if (LabelTemplate != null) { label.ContentTemplate = LabelTemplate; } return label; } #endregion } }