在WPF中使用ItemsControl控件来实现线状图控件(一)

本文介绍了如何在WPF中利用ItemsControl和DataTemplate创建线状图,通过Converter处理数据,利用PathGeometry绘制折线。文章讨论了如何克服ItemsControl的优化问题,以及如何通过自定义控件和附加属性来连接图表中的点。
摘要由CSDN通过智能技术生成

在前面的文章里面提到了如何使用ItemsControl编写一个直方图控件(还没有写完,今天因为有急用就先写线状图的编写方法了),因此在阅读这篇文章之前,推荐先阅读下面几篇文章:

1.       使用ListBox控件来实现直方图控件(一)

2.       使用ListBox控件来实现直方图控件(二)

3.       使用ListBox控件来实现直方图控件(三)

4.       使用ListBox控件来实现直方图控件(四)

5.       使用ListBox控件来实现直方图控件(五)

按照在()里面介绍过的方法 ,程序是把直方图后面的数据转换成矩形的高度,对于线状图来说,那就是把线状图后面的数据转化成折线上点的高度就可以了。因此我们的Converter可以复用直方图控件里面的Converter

internal class ChartValueToHeightConverter : IValueConverter

{

    #region IValueConverter Members

 

    public object Convert(object value, Type targetType,

        object parameter, CultureInfo culture)

{

    // 复用直方图控件里面的Converter唯一的问题是,当时我在Converter函数里面

    // 硬编码成Histogram类型了,所以这里我只好暂时先将它改成LineChart类型。

    // 如果要做一个通过的Converter的话,问题也不是很大,只要把下面用到的TickLabelHeight

    // Maximum, Minimum属性都放在ChartBase类里面就好了。

        LineChart chart =

            ((ObjectDataProvider)parameter).ObjectInstance as LineChart;

 

        return  (chart.ActualHeight - chart.TickLabelHeight) * 0.9 * (double)value

              / (chart.Maximum - chart.Minimum);

    }

 

    public object ConvertBack(object value, Type targetType,

        object parameter, CultureInfo culture)

    {

        throw new NotImplementedException();

    }

 

    #endregion

}

 

ItemsControlItemTemplate换成下面这个DataTemplate就可以把点画出来了:

 

<Grid x:Name="ChartArea" Width="20" VerticalAlignment="Bottom">

    <Grid.RowDefinitions>

        <RowDefinition Height="Auto"/>

        <RowDefinition Height="{ Binding RelativeSource

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值