private void GenerateDataPoint(KeyValuePair <string, double> kvp, Range range)
{
// Add a row and add a grid in this row
_series.RowDefinitions.Add(new RowDefinition {
Height = new GridLength(1, GridUnitType.Star)
});
Grid point = new Grid();
Grid.SetRow(point, _series.RowDefinitions.Count - 1);
_series.Children.Add(point);
// Divide the grid in 3 columns
double val = kvp.Value;
double negativeFraction = range.Fraction(Math.Min(val, 0));
double positiveFraction = 1 - range.Fraction(Math.Max(val, 0));
point.ColumnDefinitions.Add(new ColumnDefinition {
Width = new GridLength(negativeFraction, GridUnitType.Star)
});
point.ColumnDefinitions.Add(new ColumnDefinition {
Width = new GridLength(1 - positiveFraction - negativeFraction, GridUnitType.Star), MinWidth = MinBarSize
});
point.ColumnDefinitions.Add(new ColumnDefinition {
Width = new GridLength(positiveFraction, GridUnitType.Star)
});
Border axisY = new Border
{
BorderThickness = new Thickness(0.75),
BorderBrush = ForegroundColor,
Opacity = 0.5,
HorizontalAlignment = val > 0.0 ? HorizontalAlignment.Left : HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Stretch,
Margin = new Thickness(0, -5, 0, -5)
};
Grid.SetColumn(axisY, 1);
point.Children.Add(axisY);
// Put a bar in the middle column
Border bar = new Border
{
Margin = new Thickness(0, MarginBetweenBars, 0, MarginBetweenBars),
Background = GetColorByIndex(0)
};
Grid.SetColumn(bar, 1);
SetTooltip(bar, kvp.Key, FormattedValue(kvp.Value));
point.Children.Add(bar);
}