Гладкая анимация текста (Пунктирная рамка) с помощью WPF

Попытка создать управление пунктирной рамкой с гладкой анимацией текста. Текущие усилия включают:

  • Используя переводят, преобразовывают
  • Используя анимацию на свойствах зависимости от Холста (Левый, Правильный)
  • Используя анимацию на пользовательском свойстве зависимости (Точка) и использующий рисование зрительного ряда (formattedtext)
  • Использование CompositionTarget. Рендеринг

Но анимация является все еще изменчивой и интенсивно использующей ресурсы (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>

Контрольный список:

  • Подтвержденный никакой рендеринг программного обеспечения не происходит (инструмент производительности мс и проверяет RenderCapability. Уровень)
  • Вызов замораживания на любом вообразимом объекте
  • Отключенный любой растровый эффект и прозрачность
  • Проверенный вся пунктирная рамка управляет там (те же проблемы)

Протестированный на:

  • ЦП: Core 2 Duo Intell (T6600) @2.2Ghz
  • ПОРШЕНЬ: 4 ГБ
  • GPU: Nvidia GeForce 9600M GS (последние драйверы)
  • ОС: Windows 7 (64bit)

Какие-либо идеи (или еще лучше пример кода)?

От ответов кажется, что это не проблема wpf (другие средства управления пунктирной рамкой хорошо работают для других, но не для меня), гайка, я получаю те же проблемы о каждой машине, на которой я протестировал это.

6
задан Goran 9 June 2010 в 09:38
поделиться

3 ответа

Надеюсь, это поможет вам - http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html

И версию WPF также можно найти здесь

1
ответ дан 16 December 2019 в 21:34
поделиться

Ваша анимация будет полностью обрабатываться на слое MilCore, если:

  1. Ваша TranslateTransform является RenderTransform (не LayoutTransform), и
  2. Вы используете простую анимацию, такую как DoubleAnimation, и
  3. Ваш объект не имеет обтравки или расчетов непрозрачности

Попробуйте использовать DoubleAnimation-анимированную TranslateTransform для RenderTransform на TextBlock, который является прямым дочерним объектом Window с настройками по умолчанию.

  • Если это все еще работает медленно, значит, в вашей системе Direct3D есть что-то медленное, потому что управляемый код вообще не задействован, а вызовы MilCore очень просты, но

  • Если это работает гладко и эффективно, постепенно меняйте это на ваш плохо работающий код, чтобы увидеть, какое изменение вызывает замедление.

Учитывая вашу реакцию на ответ Jobi Joy, я бы заподозрил, что проблема где-то в вашем оборудовании или настройках Direct3D, но единственный способ узнать это - протестировать.

4
ответ дан 16 December 2019 в 21:34
поделиться

Если вы используете WPF 4.0, попробуйте установить CacheMode="BitmapCache" (в XAML) для элемента, который вы анимируете, в данном случае, вероятно, TextBlock.

3
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: