Как настроить подсказку для каждой отдельной точки данных в диаграмме lineseries набора средств wpf?

Я видел несколько вопросов о выполнении пользовательской подсказки для одного линейного ряда.

Мне нужен пользовательский инструмент для каждой точки данных. Я хотел бы добавить в подсказку больше, чем просто зависимый путь значения и независимый путь значения.

Пример у меня есть 2 точки данных на одной линии со значением (ось Y)
2, Дата (ось x) 4/28/2016, и конфигурация A. другое имеет
A значение 3, Дата 29.04.2016 и конфигурация B.

Как бы я также показал конфигурации? Это все сделано в коде позади, потому что у меня есть динамическое количество lineseries. Поэтому я не могу просто назначить стиль каждому lineseries в xaml.

var MyLineSeries = new LineSeries();
lMyLineSeries.DependentValuePath = "Y";
lMyLineSeries.IndependentValuePath = "X";
lMyLineSeries.DataPointStyle = lToolTipDataPointStyle;

Это мой код для создания стиля подсказки.

var lToolTipDataPointStyle = new Style(typeof(LineDataPoint));
var lTemplate = new ControlTemplate(typeof(LineDataPoint));
var lGridElement = new FrameworkElementFactory(typeof(Border));

//Tooltip
var lStackPanel = new StackPanel();

var lValueContentControl = new ContentControl();
lValueContentControl.SetBinding(ContentControl.ContentProperty, new Binding(myLineSeries.DependentValuePath));
lValueContentControl.ContentStringFormat = "Value: {0}";

var lConfigurationContentControl = new ContentControl();
lConfigurationContentControl.SetBinding(ContentControl.ContentProperty, new Binding())//This is what Idk what to bind to???

lConfigurationContentControl.ContentStringFormat = "Configuration: {0}";

lStackPanel.Children.Add(lValueContentControl);
lStackPanel.Children.Add(lConfigurationContentControl);

lGridElement.SetValue(ToolTipService.ToolTipProperty, lStackPanel);


var lEllipseElement = new FrameworkElementFactory(typeof(Ellipse));
lEllipseElement.SetValue(Ellipse.StrokeThicknessProperty, new TemplateBindingExtension(Border.BorderThicknessProperty));
lEllipseElement.SetValue(Ellipse.StrokeProperty, new TemplateBindingExtension(Border.BorderBrushProperty));
lEllipseElement.SetValue(Ellipse.FillProperty, new TemplateBindingExtension(Grid.BackgroundProperty));

lGridElement.AppendChild(lEllipseElement);
lTemplate.VisualTree = lGridElement;

var lTemplateSetter = new Setter();
lTemplateSetter.Property = LineDataPoint.TemplateProperty;
lTemplateSetter.Value = lTemplate;

lToolTipDataPointStyle.Setters.Add(lTemplateSetter);

return lToolTipDataPointStyle;

1 ответ

  1. Я понял это, используя тег на линейной серии.

    myLineSeries.Tag = "Configuration";
    var lConfigurationContentControl = new ContentControl();
    lConfigurationContentControl.SetBinding(ContentControl.ContentProperty, new Binding(myLineSeries.Tag.ToString()))
    
    lConfigurationContentControl.ContentStringFormat = "Configuration: {0}";