2016-06-30 10 views
2

In einer UWP-App, ich zeige eine Fehlerleiste im unteren Teil des Fensters, wie Mail-Anwendung von Windows 10. Die Idee ist, wenn ich die Sichtbarkeit zu Collapsed ändern, würde die Animation starten. Die Animation funktioniert nur einmal, wenn das Fenster erstellt wird. Ich möchte die Animation jedes Mal auslösen, wenn die Sichtbarkeit von "Sichtbar" zu "Eingeschaltet" wechselt. Der XAML-Code ist:Wie starten Sie die Animation in UWP mit Visible-Eigenschaft?

<StackPanel Grid.Row="1" Canvas.ZIndex="10" Background="{StaticResource BackError}" VerticalAlignment="Bottom" Name="NotificationStackPanel" > 
     <StackPanel.Transitions> 
      <TransitionCollection> 
       <PaneThemeTransition Edge="Bottom"/> 
      </TransitionCollection> 
     </StackPanel.Transitions> 
     <TextBlock VerticalAlignment="Center" Foreground="White" Margin="20" Name="NotificationText"/> 
    </StackPanel> 

Meine Abhilfe für jetzt ist die gesamte Stackpanel zu entfernen und wieder neu zu erstellen, es funktioniert, aber es scheint zu hässlich.

+1

Transitions viele Interaktionsmöglichkeiten bieten nicht traurig ... Wenn Sie Möchten Sie die 'PaneThemeTransition' verwenden, tun Sie dies auf die einzig mögliche Art und Weise. Nur andere Option Ich kann denken, wenn stattdessen eine Storyboard-Animation verwendet wird. –

Antwort

-2

PaneThemeTransition ist eine Übergangsanimation. In der Regel verwenden wir Flächenanimationen (PaneThemeTransition), um UI zu zeigen, die in erheblichem Abstand auf dem Bildschirm angezeigt werden, z. B. ein Aufgabenbereich oder eine benutzerdefinierte Tastatur.

Übergangsanimationen verfügen über integrierte Auslöser (Übergang), die automatisch ausgeführt werden können, wenn Elemente der Benutzeroberfläche hinzugefügt, entfernt, neu angeordnet werden usw. Übergangsanimationen sind einfach anzuwenden. Aber wir haben nicht viel Kontrolle über das Timing und die Reihenfolge der Animationseffekte.

die Panel-Animation neu zu starten, können Sie die StackPanel bilden ihr Mutterelement entfernen und anschließend wieder hinzufügen:

private bool isVisible = true; 

private void ChangeVisibility() 
{ 
    if (isVisible) 
    { 
        //Root is a Grid which is the parent element of NotificationStackPanel 
        Root.Children.Remove(NotificationStackPanel); 
    } 
    else 
    { 
        Root.Children.Add(NotificationStackPanel); 
    } 
    isVisible = !isVisible; 
} 
+0

-1 hast du die Frage gelesen? "Meine Problemumgehung ist jetzt, das gesamte StackPanel zu entfernen und neu zu erstellen, es funktioniert aber es scheint zu hässlich." –

+0

@Markus OP Sagt "es neu erstellen", aber es gibt keine Notwendigkeit, es neu zu erstellen, so in meiner Antwort, ich sagte ** fügen Sie es wieder ** und ich denke, das ist der einzige Weg, um die Panel-Animation neu zu starten. Wenn Sie einen besseren Ansatz haben, teilen Sie es bitte! – ZORRO