我想创建一个时间轴WPF控件(如此(http://www.taterboy.com/blog/images/MotionEditor/classic_vs_custom.png)类型的时间轴 - 用于动画编辑)。
我通过在PaintEvent处理程序中手动绘制所有内容来对这样的简单Winforms控件进行原型设计,虽然它起作用并且可能是最有效的方式,但它不灵活或没有吸引力。
我正在使用WPF制作一个功能齐全的控件,并想知道使用网格控件作为时间轴的可能性 - 每个离散时间位置由一列(由关键帧存在时为阴影)和按行跟踪。 / p>
我不知道,对这个控件一无所知,这是我第一次使用WPF,所以我想知道是否有人可以评论这个想法?
具体来说,从性能的角度来看,网格设计是以这种方式使用还是更适合在设计时构建gui?尝试使用大量元素动态修改其配置会导致严重的性能损失吗? (~2000-3000可能是最坏的情况)
从编码的角度来看,修改网格有多容易?并且做一些像阴影细胞这样的事情?这是一个简单的问题Grid.NumberOfColumns = x
还是每个元素都必须是一个独特的对象?
感谢您的任何见解!
答案 0 :(得分:3)
使用Grid
肯定是一种选择,并且在XAML中使用Grid
并且后面的代码非常简单。
<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也可能成为一个问题,应该通过VirtualizingStackPanel
在UI vritualization之后解决。 ItemsControl
允许您为项目提供DataTemplate,从长远来看,根据您对规模的初始陈述使用Grid
应该是更好的方法。
Expression Blend是使用WPF构建的,并且对动画有广泛的支持;包括一个互动和强大的时间表,所以它可以做到。理解WPF是关键,否则随着您的理解的增长,您将最终重构您的初始方法。如果可以的话,尝试为WPF与WinForms的不同之处(这是非常激烈的)获得一个不错的基础,因为它将使你的生活更轻松。