我想创建一个时间线 WPF 控件(如 (http://www.taterboy.com/blog/images/MotionEditor/classic_vs_custom.png) 类型的时间线 - 用于动画编辑)。
我通过在 PaintEvent 处理程序中手动绘制所有内容来制作这样一个简单的 Winforms 控件的原型(prototype),尽管它有效并且可能是最有效的方式,但它并不灵活或不吸引人。
我正在使用 WPF 制作一个功能齐全的控件,并且想知道使用 Grid 控件作为时间线的可能性 - 每个离散时间位置由一列表示(当存在关键帧时为阴影)并按行跟踪。
我不知道,对这个控件一无所知,这是我第一次使用 WPF,所以我想知道是否有人可以评论这个想法?
具体来说,从性能的角度来看,网格是为这种方式设计的,还是更多地用于在设计时构建 gui?尝试使用大量元素动态修改其配置是否会导致严重的性能损失? (〜2000-3000可能是最坏的情况)
从编码的角度来看,修改网格有多容易?并做一些事情,例如为细胞着色?是不是很简单Grid.NumberOfColumns = x
还是每个元素都必须是唯一的对象?
感谢您的任何见解!
最佳答案
使用 Grid
当然是一种选择,并且与 Grid
一起工作在 XAML 和后面的代码中是相当微不足道的。
<Grid Name="MyGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
</Grid>
MyGrid.ColumnDefinitions.Add(new ColumnDefinition()
{ Width = new GridLength(0, GridUnitType.Star) });
然后您可以使用
Rectangle
照顾你的阴影。<Rectangle Grid.Column="0"></Rectangle>
问题将归结为性能,但是您可以根据各种因素来解决。如果性能是障碍,另一种方法可能是使用 VirtualizingStackPanel作为 ItemsControl 中的底层布局容器因为它将地址 UI virtualization . Data virtualization也可能成为问题,应在 UI 虚拟化后通过
VirtualizingStackPanel
解决。 . ItemsControl
将允许您提供 DataTemplate对于项目,从长远来看应该是使用 Grid
的更好方法根据您对尺寸的初步陈述。Expression Blend 是使用 WPF 构建的,并且对动画有广泛的支持;包括交互式和强大的时间线,因此可以完成。理解 WPF 是关键,否则随着理解的增长,您最终将重构您的初始方法。如果可以的话,尝试为 WPF 与 WinForms 的不同(它是激烈的)打下良好的基础,因为它会让你的生活更轻松。
关于wpf - 使用 Grid 创建 Timeline 控件的可行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4887862/