Попытка создать управление пунктирной рамкой с гладкой анимацией текста. Текущие усилия включают:
Но анимация является все еще изменчивой и интенсивно использующей ресурсы (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>
Контрольный список:
Протестированный на:
Какие-либо идеи (или еще лучше пример кода)?
От ответов кажется, что это не проблема wpf (другие средства управления пунктирной рамкой хорошо работают для других, но не для меня), гайка, я получаю те же проблемы о каждой машине, на которой я протестировал это.
Надеюсь, это поможет вам - http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html
И версию WPF также можно найти здесь
Ваша анимация будет полностью обрабатываться на слое MilCore, если:
Попробуйте использовать DoubleAnimation-анимированную TranslateTransform для RenderTransform на TextBlock, который является прямым дочерним объектом Window с настройками по умолчанию.
Если это все еще работает медленно, значит, в вашей системе Direct3D есть что-то медленное, потому что управляемый код вообще не задействован, а вызовы MilCore очень просты, но
Если это работает гладко и эффективно, постепенно меняйте это на ваш плохо работающий код, чтобы увидеть, какое изменение вызывает замедление.
Учитывая вашу реакцию на ответ Jobi Joy, я бы заподозрил, что проблема где-то в вашем оборудовании или настройках Direct3D, но единственный способ узнать это - протестировать.
Если вы используете WPF 4.0, попробуйте установить CacheMode="BitmapCache"
(в XAML) для элемента, который вы анимируете, в данном случае, вероятно, TextBlock
.