animazione del testo liscio (Marquee) utilizzando WPF
Domanda
Il tentativo di costruire un controllo tendone con animazione di testo liscia. Gli attuali sforzi includono:
- Uso tradurre trasformare
- Utilizzo di animazione su Tela proprietà di dipendenza (sinistra, destra)
- Utilizzo di animazione sulla proprietà di dipendenza personalizzato (Point) e l'utilizzo di immagini di disegno (FormattedText)
- Uso CompositionTarget.Rendering
Ma l'animazione è ancora instabile e alta intensità di risorse (2-10% della CPU).
Codice di prova utilizzato in mora WPF finestra che presumo dovrebbe produrre un'animazione fluida:
<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>
Lista di controllo:
- Confermato il rendering software è in corso (strumento ms prestazioni e RenderCapability.Tier controllo)
- Calling congelamento su qualsiasi oggetto immaginabile
- disabili alcun effetto bitmap e trasparenza
- Controllato tutti i controlli tendone là fuori (stessi problemi)
Testato su:
- CPU: Intell nucleo 2 duo (T6600) @ 2.2Ghz
- RAM: 4 GB
- GPU: NVidia GeForce 9600M GS (driver più recenti)
- OS: Windows 7 (64 bit)
Tutte le idee (o meglio ancora esempio di codice)?
Dalle risposte sembra che questo non è un problema di WPF (altri controlli tendone funzionano bene per gli altri ma non per me), il dado sto ottenendo gli stessi problemi su ogni macchina ho provato questo su.
Soluzione
Spero che questo può aiutare - http: //jobijoy.blogspot .com / 2008/08 / silverlight-tendone-control.html
E la versione WPF possono anche essere trovate qui
Altri suggerimenti
L'animazione sarà gestita interamente a livello di MilCore se:
- Il tuo TranslateTransform è un RenderTransform (non un LayoutTransform), e
- È possibile utilizzare una semplice animazione, come un DoubleAnimation, e
- Il vostro oggetto non ha ritaglio o opacità calcoli
Provare a utilizzare un TranslateTransform DoubleAnimation animato per un RenderTransform su un TextBlock che è figlio diretto di una finestra con le impostazioni predefinite.
-
Se questo è ancora lento, c'è qualcosa di lento sul sistema Direct3D perché il codice gestito non è coinvolto a tutti e chiamate di MilCore sono molto semplici, ma
-
Se funziona senza intoppi e in modo efficiente, in modo incrementale modificarlo a vostro codice mal esecuzione per vedere che cosa il cambiamento provoca il rallentamento.
Data la tua risposta alla risposta di Jobi Joy avrei il sospetto che il problema è da qualche parte nel vostro hardware o configurazione Direct3D, ma l'unico modo per scoprirlo è di provarlo.
Se si utilizza WPF 4.0, prova a porre la CacheMode="BitmapCache"
(in XAML) sull'elemento che si sta animando, in questo caso, probabilmente un TextBlock
.