3D 旋转破碎的内容控件
在前后内容之间旋转。
引言
这个控件具有前后内容。内容之间的过渡是内容分解成多个片段的 3D 旋转。
这有点像 Josh Smith 制作的更加优雅的控件的模仿,你可以在 这里找到它。
背景
在动画期间,前后内容控件会被隐藏,并且 Viewport3D
会被显示。当动画完成时,Viewport3D
会被隐藏,并且相应的內容会被显示。
这仅仅通过为每个内容控件创建一个视觉画笔来实现,然后使用 Viewbox
属性检索视觉画笔的一部分,然后将该画笔绘制到网格上,该网格随后被设置为 Viewport2DVisual3D
的 Visual
属性。然后,Viewport2DVisual3D
会被定位并添加到视口中。
使用代码
要更改每个旋转片段的大小,你可以设置自定义控件中的 PeiceSizeHeight
和 PeiceSizeWidth
字段。这些字段使用相对于控件实际大小的绝对坐标。 还有用于动画长度的字段。
这些字段应该作为依赖属性公开;但是,我认为字段适合指示此控件的“不完整”状态。
double PeiceSizeHeight = 0.2;
double PeiceSizeWidth = 0.2;
关注点
控件的一些功能在解决最重要的问题之前会被忽略。大多数都用代码中的注释标记。
我对这个控件的主要问题是动画。每个片段都有自己的动画,它独立于其他片段触发和运行,并且实际动画在每个 Viewport2DVisual3D
的创建阶段之后立即启动。在 Storyboard
中使用关键帧动画将是构建动画并为每个片段提供适当的动画“延迟”时间偏移的理想选择。
可以使此控件更好的一件事是,如果每个 Viewport2DVisual3D
都有一个描述片段位置的属性(片段向下,片段跨越 – 例如,3,3 => 是 6 个片段的中间片段,6 个片段跨越)。这将使以受控方式执行动画的任务所需的代码更少,而不是依赖于在迭代语句期间将子项添加到视口的顺序。
是否可以通过向自定义 Viewport3D
类添加附加属性,或者通过向自定义 Viewport2DVisual3D
类添加依赖属性来实现?我应该扩展 Viewport3D
类还是 Viewport2DVisual3D
类来保存“片段向下/片段跨越”属性,或者我完全走错了方向?感谢任何建议。