2014-01-14 13 views
6

Ich habe eine Popup Style für die Verwendung in meiner Windows 8.1-Anwendung erstellt. Und ich habe PopupThemeTransition auf seine ChildTransitions Eigenschaft angewendet.Wie animiere ich ein Popup, wenn es sich versteckt?

<Style x:Key="AnimatedPopupStyle" TargetType="Popup"> 
    <Setter Property="IsLightDismissEnabled" Value="False"/> 
    <Setter Property="ChildTransitions"> 
     <Setter.Value> 
      <TransitionCollection> 
       <PopupThemeTransition/> 
      </TransitionCollection> 
     </Setter.Value> 
    </Setter> 
</Style> 

Mein Problem ist, dass es beseelt, wenn es & öffnet nicht beim Schließen Animieren. Was damit zu tun, um den Inhalt beim Verstecken zu animieren? Soll ich ein benutzerdefiniertes Popup-Steuerelement erstellen?

NB: Ich weiß, dass PopInThemeAnimation & PopOutThemeAnimation ist da. Aber wissen Sie nicht, wie man es unter dieser Bedingung benutzt?

+0

Was war der Grund dafür, dass ich das Thema nicht verwenden wollte? –

+0

@ JerryNixon-MSFT Entschuldigung, was meinst du es? – asitis

Antwort

9

Dies ist auf das Popup nicht heimisch, weil sie in der Regel nicht über eine Exit-Animation haben. Abgesehen davon gibt es keinen Grund, warum Sie einem Popup-Steuerelement keine Exit-Animation hinzufügen können.

Versuchen Sie folgendes:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.Resources> 
     <Storyboard x:Name="ShowPopup"> 
      <PopInThemeAnimation Storyboard.TargetName="MyPopup" /> 
     </Storyboard> 
     <Storyboard x:Name="HidePopup"> 
      <PopOutThemeAnimation Storyboard.TargetName="MyPopup" /> 
     </Storyboard> 
    </Grid.Resources> 
    <Popup x:Name="MyPopup" IsOpen="True" 
      HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Popup.Transitions> 
      <TransitionCollection> 
       <PopupThemeTransition /> 
      </TransitionCollection> 
     </Popup.Transitions> 
     <Grid Height="200" Width="200" Background="Red"> 
      <StackPanel> 
       <Button Content="Hide (Native)" HorizontalAlignment="Center"> 
        <Interactivity:Interaction.Behaviors> 
         <Core:EventTriggerBehavior EventName="Click"> 
          <Core:ChangePropertyAction 
           PropertyName="IsOpen" 
           TargetObject="{Binding ElementName=MyPopup}" /> 
         </Core:EventTriggerBehavior> 
        </Interactivity:Interaction.Behaviors> 
       </Button> 
       <Button Content="Hide (Storyboard)" HorizontalAlignment="Center"> 
        <Interactivity:Interaction.Behaviors> 
         <Core:EventTriggerBehavior EventName="Click"> 
          <Media:ControlStoryboardAction 
           Storyboard="{StaticResource HidePopup}"/> 
         </Core:EventTriggerBehavior> 
        </Interactivity:Interaction.Behaviors> 
       </Button> 
      </StackPanel> 
     </Grid> 
    </Popup> 
    <StackPanel> 
     <Button Content="Show Popup (Native)" HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Interactivity:Interaction.Behaviors> 
       <Core:EventTriggerBehavior EventName="Click"> 
        <Core:ChangePropertyAction 
         TargetObject="{Binding ElementName=MyPopup}" 
         PropertyName="IsOpen" Value="True"/> 
       </Core:EventTriggerBehavior> 
      </Interactivity:Interaction.Behaviors> 
     </Button> 
     <Button Content="Show Popup (Storyboard)" HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Interactivity:Interaction.Behaviors> 
       <Core:EventTriggerBehavior EventName="Click"> 
        <Core:ChangePropertyAction 
         TargetObject="{Binding ElementName=MyPopup}" 
         PropertyName="IsOpen" Value="True"/> 
        <Media:ControlStoryboardAction 
         Storyboard="{StaticResource ShowPopup}"/> 
       </Core:EventTriggerBehavior> 
      </Interactivity:Interaction.Behaviors> 
     </Button> 
    </StackPanel> 
</Grid> 

diese verwenden:

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity" 
xmlns:Core="using:Microsoft.Xaml.Interactions.Core" 
xmlns:Media="using:Microsoft.Xaml.Interactions.Media" 

Best of luck!

+0

sehr Dank @Jerry :) – asitis

+2

wenn Sie storboards verwenden, etwas zu zeigen/verstecken würde ich vorschlagen, auch nicht einmal ein Popup mit. Benutze einfach ein Gitter und dann musst du dir keine Gedanken um die IsOpen-Eigenschaft machen. –

+3

Lass mich darüber nachdenken, Shawn. Die zwei Hauptvorteile eines Popups sind seine Fähigkeit, sich selbst in den visuellen Baum zu injizieren, und die Fähigkeit, eine leichte Abweisung zu handhaben. Da er die Lichtabweisung deaktiviert hat, ist das einzige andere die Baumsache. Und wie schwer ist das? Eigentlich ist es nicht super einfach, aber nicht so schwer. Ihre Empfehlung ist in Ordnung - aber, was gesagt, was ist der Schaden? Es ist ziemlich leicht. –

Verwandte Themen