如何在wpf中的DateTime上使用canvas.SetLeft

问题描述 投票:0回答:2

SesaonallistObservableCollection类型的DataPoint

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

无法将DateTime转换为double

当我使用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
2个回答
0
投票

你可以试试TicksDataTime属性。

Canvas.SetLeft(ellipse, Convert.ToDouble(Seasonallist[i].X.Ticks));

你必须找到一个很好的方法将这个大数字转换成X Canvas协调。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.