使用Grid创建时间轴控件的可行性

时间:2011-02-03 15:09:31

标签: wpf user-controls wpf-controls wpftoolkit

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

我通过在PaintEvent处理程序中手动绘制所有内容来对这样的简单Winforms控件进行原型设计,虽然它起作用并且可能是最有效的方式,但它不灵活或没有吸引力。

我正在使用WPF制作一个功能齐全的控件,并想知道使用网格控件作为时间轴的可能性 - 每个离散时间位置由一列(由关键帧存在时为阴影)和按行跟踪。 / p>

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

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

从编码的角度来看,修改网格有多容易?并且做一些像阴影细胞这样的事情?这是一个简单的问题Grid.NumberOfColumns = x还是每个元素都必须是一个独特的对象?

感谢您的任何见解!

1 个答案:

答案 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 virtualizationData virtualization也可能成为一个问题,应该通过VirtualizingStackPanel在UI vritualization之后解决。 ItemsControl允许您为项目提供DataTemplate,从长远来看,根据您对规模的初始陈述使用Grid应该是更好的方法。

Expression Blend是使用WPF构建的,并且对动画有广泛的支持;包括一个互动和强大的时间表,所以它可以做到。理解WPF是关键,否则随着您的理解的增长,您将最终重构您的初始方法。如果可以的话,尝试为WPF与WinForms的不同之处(这是非常激烈的)获得一个不错的基础,因为它将使你的生活更轻松。