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
{
/// <summary>
/// Interaction logic for YAxisLabels.xaml
/// </summary>
internal partial class XAxisLabels : UserControl
{
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="XAxisLabels"/> class.
/// </summary>
public XAxisLabels()
{
InitializeComponent();
this.Loaded += YAxisLabels_Loaded;
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the labels.
/// </summary>
/// <value>
/// The labels.
/// </value>
public ObservableCollection<Object> Labels
{
get { return (ObservableCollection<Object>)GetValue(LabelsProperty); }
set { SetValue(LabelsProperty, value); }
}
public static readonly DependencyProperty LabelsProperty =
DependencyProperty.Register("Labels", typeof(ObservableCollection<Object>), typeof(XAxisLabels), new PropertyMetadata(new ObservableCollection<Object>()));
/// <summary>
/// Gets or sets the label template.
/// </summary>
/// <value>
/// The label template.
/// </value>
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
/// <summary>
/// Draws the labels.
/// </summary>
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);
};
}
}
}
/// <summary>
/// Adds the label.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="index">The index.</param>
/// <returns></returns>
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
}
}