gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:44:32 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com