0

我使用 James McCaffrey 提供的教程生成了一个图表:http: //msdn.microsoft.com/en-us/magazine/ff714591.aspx

我能够成功地做到这一点。我还添加了一个工具提示,如下所示:

plotter.AddLineGraph(compositeDataSource1,
new Pen(Brushes.Blue, 2),
new CircleElementPointMarker{ Size = 10.0, Fill = Brushes.Red ,Tooltip="Coordinates"},
new PenDescription("Number bugs open"));

我的问题是:如何在工具提示中显示点的坐标。?

4

2 回答 2

1

这就是我解决问题的方法。

EnumerableDataSource<TPoint> edc;
edc= new EnumerableDataSource<TPoint>(List_Of_TPoint);
            edc.SetXMapping(x => dateAxis.ConvertToDouble(x.X));
            edc.SetYMapping(y => Convert.ToDouble(y.Y));
            edc.AddMapping(CircleElementPointMarker.ToolTipTextProperty, s => String.Format("Y-Data : {0}\nX-Data : {1}", s.Y, s.X));

我刚刚在创建 EnumerableDataSource 时添加了上面的映射。然后将edc添加到绘图仪。

plotter.AddLineGraph(
                            edc,
                            new Pen(Brushes.Transparent, 3),
                            new CircleElementPointMarker
                            {
                                Size = 15,
                                Brush = border,
                                Fill = c2
                            },
                            null
                            );
于 2014-02-11T09:49:03.070 回答
0

使用 ElementMarkerPointsGraph 和 CircleElementPointMarker 可能会耗费大量资源。将为每个点创建一个椭圆。即使没有人想看到工具提示,也会为每个点执行映射(为工具提示构建字符串)。

所以我的方法是使用 MarkerPointsGraph 并动态设置它的 Tooltip。

xml:

<d3:MarkerPointsGraph Name="MyMarkerPointsGraph" DataSource="{Binding Values}" ToolTip="Dummy" ToolTipOpening="CircleMarker_OnToolTipOpening">
  <d3:MarkerPointsGraph.Marker>
    <d3:CirclePointMarker />
  </d3:MarkerPointsGraph.Marker>
</d3:MarkerPointsGraph>

这里是背后的代码:

private void CircleMarker_OnToolTipOpening(object sender, ToolTipEventArgs e)
{
    var pos = Mouse.GetPosition(MyMarkerPointsGraph);
    var transform = GetTransform(MyMarkerPointsGraph);
    transform.ScreenToData(pos);
    var dataPoint = transform.ScreenToData(pos);

    MyMarkerPointsGraph.ToolTip = $"Y-Data : {dataPoint.Y}\nX-Data : {dataPoint.X}";
}

public static CoordinateTransform GetTransform(PointsGraphBase graph)
{
    if (!(graph.Plotter is Plotter2D))
        return null;
    var transform = ((Plotter2D)graph.Plotter).Viewport.Transform;
    if (graph.DataTransform != null)
        transform = transform.WithDataTransform(graph.DataTransform);

    return transform;
}
于 2015-12-29T12:01:39.813 回答