【问题标题】:Is it possible to draw a rectangle over a charting element?是否可以在图表元素上绘制一个矩形?
【发布时间】:2011-10-19 22:59:50
【问题描述】:

我有一些像这样绘制时间序列散点图的 XAML(X 轴:日期时间,Y 轴:整数值):

<Grid Name="chartgrid">
    <charting:Chart Name="scatterplot">
    </charting:Chart>
</Grid>

我可以将图形对象(例如线条)添加到该网格作为其子项之一,但必须使用与图表控件使用的坐标不同的XY 坐标来执行此操作。当然这是意料之中的,因为图表设置了自己的轴。

我能想到的唯一方法是将一些虚拟点作为不同的系列添加到图表中,但我希望有更好的方法来做到这一点。有什么建议吗?

编辑:添加了一个数字以进一步澄清。

【问题讨论】:

    标签: c# wpf graphics wpftoolkit


    【解决方案1】:

    我能想到的唯一方法是检查虚拟树以查找两个轴对象。

    也许通过使用VisualTreeHelper

    一旦您知道它们的位置和大小以及您希望从图表控件中获得的比例信息,您就可以计算从图表点到 Silverlight 坐标的转换。

    【讨论】:

    • 同意 Erno。使用VisualTreeHelper 挖掘图表控件的可视子项以提取其Canvas 面板,该面板上印有图表。然后使用容器生成器获取要在矩形下分组的节点,然后使用节点的绝对坐标 w.r.t。在画布面板中,绘制一个包含所需节点的矩形。
    【解决方案2】:

    你想用一个矩形来装饰网格吗?如果是这样,为什么不使用边框? ...(对不起,我还没有评论的选项。因此我问你这个问题作为答案)

    【讨论】:

    • 哦,不。我有一个散点图,我想在上面标记一组彼此靠近的点。为此,我正在考虑使用点的坐标并创建一个矩形,然后我可以将其覆盖在图表上。我目前知道的唯一方法是将这些点创建为另一个系列并将它们添加到图表本身。我添加了一个图来进一步澄清这一点。
    【解决方案3】:

    我会创建一个Adorner 来实际绘制您的叠加层内容。在您的图表控件中创建此图层,或在封装两者的类中创建此图层。并为 Chart 类提供正确的 MatrixTransform 以将覆盖对象中的给定坐标转换为当前的 Chart 变换。 TransformToDescendant 也很有帮助,它允许您将图表中的一个点转换为您的装饰器。

    我不知道您在图表 IScrollInfo、RenderTransform 等上转换位置的内容和方式。但是有了这些信息,我认为您可以实现您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2015-11-26
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多