Попытка создать элемент управления с плавной текстовой анимацией. Текущие усилия включают в себя:
- Использование преобразования translate
- Использование анимации в свойствах зависимостей Canvas (слева, справа)
- Использование анимации для пользовательского свойства зависимости (Point) и использование визуальных элементов рисования (formattedtext)
- Использование CompositionTarget.Rendering
Но анимация все еще прерывистая и ресурсоемкая (2-10% ЦП).
Тестовый код, используемый в окне 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 Performance Tool и проверка RenderCapability.Tier)
- Вызов замораживания на любом мыслимом объекте
- Отключен любой растровый эффект и прозрачность
- Проверены все элементы управления выделением (те же проблемы)
Проверено на:
- Процессор: Intell Core 2 Duo (T6600) @ 2,2 ГГц
- RAM: 4 ГБ
- GPU: NVidia GeForce 9600M GS (последние версии драйверов)
- ОС: Windows 7 (64-битная)
Есть идеи (или еще лучше пример кода)?
Судя по ответам, это не проблема wpf (другие элементы управления marquee работают хорошо для других, но не для меня), но на всех машинах, на которых я это тестировал, возникают те же проблемы.