2011-02-03 38 views
2

我想创建一个时间轴WPF控件(如在此(http://www.taterboy.com/blog/images/MotionEditor/classic_vs_custom.png)类型的时间轴中) - 动画编辑)。使用Grid创建时间轴控件的可行性

我通过在PaintEvent处理程序中手动绘制所有东西来创建一个简单的Winforms控件,虽然它的工作原理可能是最有效的方式,但它不灵活或有吸引力。

我正在使用WPF制作一个全功能的控件,并且想知道使用Grid控件作为时间线的可能性 - 每列由一个列表示的时间位置(当存在关键帧时加阴影)和行跟踪。

我不知道这个控件是什么,这是第一次使用WPF,所以我想知道是否有人可以评论这个想法?

具体而言,从性能的角度来看,是设计用于这种方式的网格,还是更多地用于在设计时构建gui?试图动态修改其配置,并使用大量元素会导致严重的性能损失吗? (〜2000-3000可能是最坏的情况)

从编码的角度来看,修改网格有多简单?做像阴影的单元格?这是一个简单的问题Grid.NumberOfColumns = x还是每个元素都必须是唯一的对象?

感谢您的任何见解!

回答

2

使用Grid当然是一种选择,并且在XAML中使用Grid,并且后面的代码非常简单。您可以使用Rectangle来照顾您的阴影。

<Rectangle Grid.Column="0"></Rectangle> 

这个问题将归结为性能,但是你可以能够通过取决于多种因素来获得。如果性能是障碍,则不同的方法可能是使用VirtualizingStackPanel作为ItemsControl中的基础布局容器,因为它将处理UI virtualizationData virtualization也可能成为一个问题,应通过VirtualizingStackPanel在UI虚拟化之后解决。 ItemsControl将允许您为物品提供DataTemplate,并且根据您的初始陈述的尺寸,从长远来看,应该是更好的方法来使用Grid

Expression Blend是使用WPF构建的,并且对动画有广泛的支持;包括交互式和强大的时间表,因此可以完成。了解WPF是关键,否则随着理解的增长,最终会重构最初的方法。试着,如果可以的话,为WPF与WinForms的区别做一个体面的基础(这很激烈),因为它会让你的生活更轻松。

+0

感谢您的回复;我花了一段时间阅读更多关于WPF的内容,而且我做得越多,我越明白它与Winforms的不同之处,但也让我印象深刻! 我在想现在我将使用virtualizingStackPanel来创建潜在关键帧的一个“静态表”,然后用户可以在“查看器”区域下缩放和移动它,以便只用他们想要的,如果我理解了这一点对。 要使用像这样的控件,每个关键帧或非关键帧部分都必须由矩形对象表示正确吗?我能够在填充时重复使用这些吗? – sebf 2011-02-04 17:00:57