wpf - 使用 Grid 创建 Timeline 控件的可行性

标签 wpf user-controls wpf-controls wpftoolkit

我想创建一个时间线 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/

相关文章:

wpf - 如何使用 Resharper 使 XAML 编辑更具响应性

c# - 单击按钮时调用 _Paint

user-interface - XNA和GUI控件(例如xaml和xna)

c# - WPF MVVM中用于数据库事务的任务,BackgroundWorkers或新线程?

c# - Caliburn micro 在使用 mef 时找不到 MainView

WPF 将 CommandParameter 绑定(bind)到 MenuItem 中的 GridViewColumnHeader 内容

c# - 使用表单元素与 UserControls 交互

c# - 将字体大小传递给 Winform C# 项目中的用户控制工具提示

c - WPF : How can I sendkeys to another control without taking focus away from the target control

wpf - 如何在WPF中获取顶部对象(窗口或页面)?