2

我认为这是一个有趣的工程级问题。

我需要设计一个显示折线图的控件。我想要做的是使用设计器添加多个Pens实际描述数据和表示的内容,以便最终以 Xaml 结尾:

<Chart>
  <Pen Name="SalesData" Color="Green" Data="..."/>
  <Pen Name="CostData" Color="Red" Data="..." />
  ...
</chart>

我的第一个想法是扩展ItemsControl课程Chart。这会带我去我想去的地方,还是应该从不同的方向看它,比如延伸Panel

主要要求是能够在设计器中使用它而无需添加任何 C# 代码。为了让它变得可行,它需要在树视图模型中保留其结构。换句话说,如果我在 Expression Blend 或 Mobiform Aurora 中使用它,我将能够从逻辑树中选择图表或选择任何单独的笔来编辑它们的属性。

4

3 回答 3

2

我会将 Chart 用作 ItemsControl,并将其 ItemsPanel 用作 Canvas(对于一些轻型用途,我会将 Grid 用作 ItemsPanel)。每个 Pen 都是从 PolyLine 类派生的 CustomControl。这有任何意义吗?

于 2008-09-15T15:34:23.933 回答
1

对于那些有兴趣从个人发展的角度进行自己控制的人(如原始问题中所述),那么我建议采用这种格式的结构。

<Chart>
  <Chart.Pens>
    <Pen Name="SalesData" Data="{Binding Name=SalesData}" />        
    <Pen Name="CostData">
      <Pen.Data>
        <PenData Y="12" X="Jan" />
        <PenData Y="34" X="Feb" />
      </Pen.Data>
    </Pen>
  </Chart.Pens>
</Chart>

为此,您需要在用户控件中公开 Pens 集合(我不会将其视为派生的 ItemsControl 控件)。这个派生的用户控件将封装其他控件,通常是一个网格来放置标题标签、轴名称标签、可能是绘图区域的 Canvas 和显示图例中的项目的 ItemsControl。


对于那些正在寻找即用型解决方案的人

For those looking for a ready to go solution then I'd check out CodePlex for VisiFire's WPF chart control. It is WPF and Silverlight compatible and it even has a Silverlight app for you to enter your data & style and have it generate XAML (or HTML) to paste into your application.

于 2008-12-02T15:48:31.010 回答
0

另一种选择是为图表扩展 Canvas 并为钢笔扩展 Shape。然后根据颜色/数据属性动态绘制形状。

于 2008-09-09T14:22:30.787 回答