65.9K
CodeProject 正在变化。 阅读更多。
Home

3D 旋转破碎的内容控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (5投票s)

2009年7月7日

CPOL

2分钟阅读

viewsIcon

37162

downloadIcon

2041

在前后内容之间旋转。

引言

这个控件具有前后内容。内容之间的过渡是内容分解成多个片段的 3D 旋转。

这有点像 Josh Smith 制作的更加优雅的控件的模仿,你可以在 这里找到它。

背景

在动画期间,前后内容控件会被隐藏,并且 Viewport3D 会被显示。当动画完成时,Viewport3D 会被隐藏,并且相应的內容会被显示。

这仅仅通过为每个内容控件创建一个视觉画笔来实现,然后使用 Viewbox 属性检索视觉画笔的一部分,然后将该画笔绘制到网格上,该网格随后被设置为 Viewport2DVisual3DVisual 属性。然后,Viewport2DVisual3D 会被定位并添加到视口中。

使用代码

要更改每个旋转片段的大小,你可以设置自定义控件中的 PeiceSizeHeightPeiceSizeWidth 字段。这些字段使用相对于控件实际大小的绝对坐标。 还有用于动画长度的字段。

这些字段应该作为依赖属性公开;但是,我认为字段适合指示此控件的“不完整”状态。

double PeiceSizeHeight = 0.2;
double PeiceSizeWidth = 0.2;

关注点

控件的一些功能在解决最重要的问题之前会被忽略。大多数都用代码中的注释标记。

我对这个控件的主要问题是动画。每个片段都有自己的动画,它独立于其他片段触发和运行,并且实际动画在每个 Viewport2DVisual3D 的创建阶段之后立即启动。在 Storyboard 中使用关键帧动画将是构建动画并为每个片段提供适当的动画“延迟”时间偏移的理想选择。

可以使此控件更好的一件事是,如果每个 Viewport2DVisual3D 都有一个描述片段位置的属性(片段向下,片段跨越 – 例如,3,3 => 是 6 个片段的中间片段,6 个片段跨越)。这将使以受控方式执行动画的任务所需的代码更少,而不是依赖于在迭代语句期间将子项添加到视口的顺序。

是否可以通过向自定义 Viewport3D 类添加附加属性,或者通过向自定义 Viewport2DVisual3D 类添加依赖属性来实现?我应该扩展 Viewport3D 类还是 Viewport2DVisual3D 类来保存“片段向下/片段跨越”属性,或者我完全走错了方向?感谢任何建议。

© . All rights reserved.