Frage

Der Versuch, eine Marquee Kontrolle mit glatter Textanimation zu bauen. Die derzeitigen Bemühungen sind:

  • übersetzen Mit Transformation
  • Verwenden von Animation auf Leinwand Abhängigkeitseigenschaften (links, rechts)
  • Verwenden von Animation auf benutzerdefinierte Abhängigkeitseigenschaft (Point) und mit Zeichen Visuals (FormattedText)
  • Verwenden CompositionTarget.Rendering

Aber die Animation ist immer noch abgehackt und ressourcenintensiv (2-10% CPU).

verwendet Prüfregeln in Standard-WPF-Fenster, das ich annehmen sollte eine glatte Animation erzeugen:

   <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>

Checkliste:

  • Bestätigte kein Software-Rendering stattfindet (ms Performance-Tool und Überprüfung RenderCapability.Tier)
  • Beim Einfrieren auf jede erdenkliche Objekt
  • Disabled jede Bitmap-Effekt und Transparenz
  • Auf alle Marquee Kontrollen gibt (gleiche Ausgaben)

Getestet auf:

  • CPU: Intell Core 2 Duo (T6600) @ 2.2Ghz
  • RAM: 4GB
  • GPU: NVidia GeForce 9600M GS (aktuelle Treiber)
  • Betriebssystem: Windows 7 (64-Bit)

Alle Ideen (oder besser noch Codebeispiel)?

Aus den Antworten scheint es, ist dies kein Problem wpf (andere Marquee Kontrollen funktionieren für andere aber nicht für mich), Mutter mich auf jedem Rechner die gleichen Probleme bekommen Getestet habe ich diese auf.

War es hilfreich?

Lösung

Andere Tipps

Ihre Animation wird vollständig an der MilCore Schicht behandelt, wenn:

  1. Ihre Translatetransform ist ein Render (kein Layout) und
  2. Sie verwenden eine einfache Animation wie ein Double und
  3. Ihr Objekt hat keine Clipping oder Opazität Berechnungen

Versuchen Sie, eine Double-animierte Translatetransform für eine Render auf einem Textblock verwenden, die ein direktes Kind von einem Fenster mit den Standardeinstellung ist.

  • Wenn dies immer noch langsam ist, gibt es etwas langsam über Ihr Direct3D-System, weil verwalteten Code überhaupt nicht beteiligt ist und MilCore die Anrufe sind sehr einfach, aber

  • Wenn es reibungslos und effizient funktioniert, ist es schrittweise zu Ihrem schlecht-performing-Code zu ändern, um zu sehen, was Änderung der Verlangsamung verursacht.

Bei Ihrer Antwort auf Jobi Joy Antwort würde ich das Problem vermutet, dass irgendwo in Ihrer Hardware oder Direct3D-Setup, aber der einzige Weg, um herauszufinden, es zu testen.

Wenn Sie WPF 4.0 verwenden, versuchen Sie die CacheMode="BitmapCache" Einstellung (in der XAML) auf dem Element, das Sie animieren, in diesem Fall wahrscheinlich ein TextBlock.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top