Trying to build a marquee control with smooth text animation. Current efforts include:
- Using translate transform
- Using animation on Canvas dependency properties (Left, Right)
- Using animation on custom dependency property (Point) and using drawing visuals (formattedtext)
- Using CompositionTarget.Rendering
But the animation is still choppy and resource intensive (2-10% CPU).
Test code used in default wpf window which I assume should produce a smooth animation:
<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>
Checklist:
- Confirmed no software rendering is taking place (ms performance tool and checking RenderCapability.Tier)
- Calling freeze on any imaginable object
- Disabled any bitmap effect and transparency
- Checked all marquee controls out there (same issues)
Tested on:
- CPU: Intell core 2 duo (T6600) @2.2Ghz
- RAM: 4GB
- GPU: NVidia GeForce 9600M GS (latest drivers)
- OS: Windows 7 (64bit)
Any ideas (or better yet code example)?
From the responses it seems this is not a wpf issue (other marquee controls work fine for others but not for me), nut I'm getting the same issues on every machine I tested this on.