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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在wpf中的DateTime上使用canvas.SetLeft相关的知识,希望对你有一定的参考价值。

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; }
}
答案

你可以试试TicksDataTime属性。

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

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

另一答案

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

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

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

以上是关于如何在wpf中的DateTime上使用canvas.SetLeft的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF 可拖动用户控件在 Canvas 上的 ListBox 中

WPF 如何向用户控件中添加新的控件

WPFの命中测试

WPF的Canvas如何在程序运行时动态地调整布局?

WPF入门教程系列六——布局介绍与Canvas

WPF入门教程系列六——布局介绍与Canvas