首页 > 解决方案 > 如何在 wpf 中的 DateTime 上使用 canvas.SetLeft

问题描述

Sesaonallist是一个ObservableCollection类型DataPoint

我正在尝试将datapoint可观察集合中的每个都写为椭圆并将其绘制到画布上。问题是,X axisDateTime得到了错误

无法将 DateTime 转换为双精度

当我使用Canvas.SetLeft(ellipse, Seasonallist[i].X);.

我不想使用任何第三方库来执行此操作,我应该查看转换器吗?

Seasonallist = new ObservableCollection<DataPoint>();

if (Seasonallist != null)
{
    for (int i = 0; i <= Seasonallist.Count - 1; i++)
    {
        Ellipse ellipse = new Ellipse();
        ellipse.Width = 5;
        ellipse.Height = 5; 
        ellipse.Fill = Brushes.Blue;
        Canvas.SetLeft(ellipse, Seasonallist[i].X); <--error here
        Canvas.SetTop(ellipse, Seasonallist.Y);    
        textCanvas.Children.Add(ellipse);
    }
}

public class DataPoint
{
   public DateTime X { get; set; }
   public double Y { get; set; }
}

标签: wpf

解决方案


是的,您需要使用转换器,但首先您必须确定时间间隔的宽度。最好使用刻度值来完成,因此:

TicksPerPixel 是显示持续时间/显示宽度

然后,您可以存储此值并使用公式 DateTime.Ticks / TicksPerPixel 计算将其绘制在正确位置所需的 left 属性。


推荐阅读