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.

È stato utile?

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:

  1. Il tuo TranslateTransform è un RenderTransform (non un LayoutTransform), e
  2. È possibile utilizzare una semplice animazione, come un DoubleAnimation, e
  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top