代码之家  ›  专栏  ›  技术社区  ›  MojoFilter

在哪里开始设计包含子对象的自定义控件?

  •  2
  • MojoFilter  · 技术社区  · 16 年前

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

    我需要设计一个显示折线图的控件。我要做的是使用设计器添加多个 Pens 它实际上描述了数据和表示,因此它最终得到了以下行中的XAML内容:

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

    我的第一个想法是扩展 ItemsControl 对于 Chart 班级。这能让我到达我想去的地方吗?还是我应该从不同的方向看它,比如说延伸 Panel ?

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Jobi Joy    16 年前

    我将把chart作为itemscontrol,它的itemspanel作为画布(对于一些较轻的用途,我将把grid作为itemspanel)。每个笔都将是从折线类派生的自定义控件。这有什么意义吗?

        2
  •  1
  •   Rhys    16 年前

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

    <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集合(我不会将其视为派生项控件)。此派生用户控件将封装其他控件(通常是网格),以放置标题标签、轴名称标签,可能是绘图区域的画布,以及显示图例中项目的项控件。


    对于那些寻找现成解决方案的人

    对于那些寻找现成解决方案的人,我会查看codeplex VisiFire's WPF图表控件。它与WPF和Silverlight兼容,甚至还具有 Silverlight app 用于输入数据样式并让它生成要粘贴到应用程序中的XAML(或HTML)。

        3
  •  0
  •   NotDan    16 年前

    另一种选择是扩展图表的画布和扩展笔的形状。然后根据颜色/数据属性动态绘制形状。