尝试构建具有流畅文本动画的选取框控件。目前的努力包括:
- 使用平移变换
- 在 Canvas 依赖属性上使用动画(左、右)
- 在自定义依赖属性(点)上使用动画并使用绘图视觉效果(格式化文本)
- 使用 CompositionTarget.Rendering
但动画仍然不稳定且占用大量资源(2-10% CPU)。
默认 wpf 窗口中使用的测试代码我认为应该产生平滑的动画:
<TextBlock x:Name="_box" FontSize="64" CacheMode="BitmapCache" Text="lorem ipsum">
<TextBlock.RenderTransform>
<TranslateTransform x:Name="AnimatedTranslateTransform" X="0" Y="0" />
</TextBlock.RenderTransform>
<TextBlock.Triggers>
<EventTrigger RoutedEvent="TextBlock.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="AnimatedTranslateTransform"
Storyboard.TargetProperty="X"
From="-300" To="300" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
清单:
- 确认没有发生软件渲染(ms 性能工具并检查 RenderCapability.Tier)
- 对任何可以想象的对象调用冻结
- 禁用任何位图效果和透明度
- 检查了所有选框控件(同样的问题)
测试于:
- CPU:英特尔酷睿2双核(T6600)@2.2Ghz
- 内存:4GB
- GPU:NVidia GeForce 9600M GS(最新驱动程序)
- 操作系统:Windows 7(64位)
有什么想法(或者更好的代码示例)?
从响应来看,这似乎不是 wpf 问题(其他选框控件对其他人来说工作正常,但对我来说则不然),但我在测试的每台机器上都遇到了相同的问题。
如果出现以下情况,您的动画将完全在 MilCore 层处理:
- 您的 TranslateTransform 是 RenderTransform (不是 LayoutTransform),并且
- 您使用简单的动画,例如 DoubleAnimation,并且
- 您的对象没有剪切或不透明度计算
尝试在 TextBlock 上使用 DoubleAnimation 动画 TranslateTransform 进行 RenderTransform,该 TextBlock 是具有默认设置的 Window 的直接子级。
鉴于您对 Jobi Joy 的回答的回应,我怀疑问题出在您的硬件或 Direct3D 设置中,但找出答案的唯一方法是测试它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)