2010-06-09 15 views
6

Provare a creare un controllo di selezione con animazione di testo uniforme. Gli attuali sforzi includono:Animazione di testo uniforme (selezione scorrevole) tramite WPF

  • Utilizzando tradurre trasformare
  • Utilizzando animazione sulle proprietà di dipendenza della tela di canapa (sinistra, destra)
  • Utilizzando animazione sulla proprietà di dipendenza personalizzato (Point) e l'utilizzo di immagini di disegno (FormattedText)
  • Utilizzando CompositionTarget.Rendering

Ma l'animazione è ancora instabile e ad alta intensità di risorse (CPU 2-10%).

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 prestazioni ms e controllo RenderCapability. Livello)
  • Chiamata di blocco su qualsiasi oggetto immaginabile
  • Disattivato qualsiasi effetto bitmap e trasparenza
  • Controllato tutti i controlli tendone là fuori (stessi numeri)

testato con:

  • CPU: Intell nucleo 2 duo (T6600) @ 2.2Ghz
  • RAM: 4GB
  • GPU : NVidia GeForce 9600M GS (driver più recenti)
  • OS: Windows 7 (64 bit)

Qualche idea (o meglio ancora un esempio di codice)?

Dalle risposte sembra che questo non sia un problema di wpf (altri controlli di selezione funzionano bene per gli altri ma non per me), nut Sto ricevendo gli stessi problemi su ogni macchina su cui ho eseguito il test.

+0

Sembra che ci sia un problema con alcuni dei computer su cui è stato testato. Anche la creazione di una versione di rilascio aiuta molto. – Goran

risposta

1

Spero che questo può aiutare - http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html

E la versione WPF possono anche essere ritrovate here

+0

Sì, è uno dei controlli che ho guardato (inclusa la versione wpf) non è fluido ed è abbastanza ricco di risorse per un compito così semplice. – Goran

+0

Ho provato entrambe le versioni Silverlight e WPF dell'applicazione di esempio di Jobi Joy su hardware obsoleto. Entrambi sono animati senza intoppi e utilizzano pochissime risorse, anche se animavano molto più di un semplice tendone. Penso che ci debba essere qualcosa di speciale nel tuo hardware o ambiente che causa il problema. Forse dovresti aggiungere alla tua domanda informazioni dettagliate su hardware, sistema operativo, specifiche NET Framework e numeri di utilizzo delle risorse, in modo che altri possano tentare di duplicare il tuo problema. –

+0

Questo è davvero strano - ogni macchina che ho testato questo sul testo e l'immagine tremola ogni 2 o 5 secondi. Ho aggiornato la mia domanda. – Goran

4

L'animazione sarà gestita interamente a livello di MilCore se:

  1. tuo TranslateTransform è un RenderTransform (non un LayoutTransform) e
  2. Si utilizza un'animazione semplice come DoubleAnimation e
  3. 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 lenta, 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 cambiarlo con il tuo codice con prestazioni scadenti per vedere quale modifica provoca il rallentamento.

dato la vostra 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 è quello di provarlo.

+1

Ho provato quello (vedi domanda aggiornata) - Sto ancora avendo gli stessi problemi. Qualche diagnostica a cui puoi pensare per individuare se c'è un problema con le macchine con cui ho a che fare? – Goran

3

Se si utilizza WPF 4.0, provare a impostare CacheMode="BitmapCache" (nello XAML) sull'elemento che si sta animando, in questo caso, probabilmente uno TextBlock.

+0

Buona idea - ma non risolve il mio problema. Sembra che la colpa sia della mia macchina (OS o HW) ma non riesco a pensare a niente. – Goran

+2

Santa mucca! Avevo avuto un problema con un'animazione che coinvolgeva una cinquantina di elementi dell'interfaccia utente. Questo mi ha tormentato per diverse settimane, ma è stato chiarito con questo attributo. Arg, perché mi ci è voluto così tanto tempo per trovarlo? – Jeb

Problemi correlati