Как да анимирате изскачащ прозорец, когато се скрива?

създадох Popup Style за използване в моето приложение за Windows 8.1. И приложих PopupThemeTransition към това е ChildTransitions собственост.

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

Проблемът ми е, че анимира, когато се отваря и не анимира, когато се затваря. Какво да направя с това за анимиране на съдържанието при скриване? Искам ли да създам персонализирана контрола за изскачащи прозорци?

Забележка: Знам, че PopInThemeAnimation & PopOutThemeAnimation са там. Но не знаете как да го използвате при това състояние?


person asitis    schedule 14.01.2014    source източник
comment
Каква беше причината да не искаш да използваш темата?   -  person Jerry Nixon    schedule 17.01.2014
comment
@JerryNixon-MSFT съжалявам, какво имаш предвид?   -  person asitis    schedule 17.01.2014


Отговори (1)


Това не е естествено за изскачащия прозорец, защото те обикновено нямат анимация за излизане. Като каза това, няма причина да не можете да добавите анимация за излизане към изскачащ контрол.

Опитайте тази:

<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>

Използване на тези:

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

Късмет!

person Jerry Nixon    schedule 14.01.2014
comment
ако използвате storboards, за да покажете/скриете нещо, бих предложил дори да не използвате изскачащ прозорец. Просто използвайте мрежа и тогава няма нужда да се притеснявате за свойството IsOpen - person Shawn Kendrot; 17.01.2014
comment
Нека помисля за това, Шон. Двете основни предимства на изскачащия прозорец са способността му да се инжектира във визуалното дърво и способността да се справя с леко отхвърляне. Тъй като той е деактивирал отхвърлянето на светлината, единственото друго е дървото. И колко трудно е това? Всъщност не е супер лесно, но не е и толкова трудно. Препоръката ви е добра - но като казахте това, каква е вредата? Това е доста леко тегло. - person Jerry Nixon; 17.01.2014
comment
Получих точно това, което търся. Благодаря и +1 за помощ. - person Raghav Narang; 05.12.2014