尝试使用流畅的文本动画构建选取框控件。目前的努力包括:
但动画仍然不稳定且资源密集(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>
清单:
经过测试:
任何想法(或更好的代码示例)?
从回复来看,这似乎不是一个wpf问题(其他选框控件对其他人来说效果不错,但不适合我),坚果我在我测试过的每台机器上都遇到了同样的问题。
答案 0 :(得分:4)
如果出现以下情况,您的动画将完全在MilCore图层处理:
尝试在TextBlock上使用DoubleAnimation-animated动画TranslateTransform进行RenderTransform,TextBlock是具有默认设置的Window的直接子项。
如果这仍然很慢,你的Direct3D系统会有些慢,因为根本不涉及托管代码,而且MilCore的调用非常简单,但是
如果它能够顺利有效地工作,请逐步将其更改为效果不佳的代码,以查看哪些更改会导致速度减慢。
鉴于您对Jobi Joy的回答,我怀疑问题出在您的硬件或Direct3D设置中,但唯一可以找到的方法是测试它。
答案 1 :(得分:3)
如果您使用的是WPF 4.0,请尝试在您动画的元素上设置CacheMode="BitmapCache"
(在XAML中),在这种情况下,可能是TextBlock
。
答案 2 :(得分:1)
希望这可以帮到你 - http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html
还可以找到WPF版本here