滑出/显示(显示/隐藏)动画以获得完整的窗口

时间:2013-10-14 15:53:48

标签: c# wpf storyboard

我有一个Windows TrayIcon应用程序。当用户单击托盘图标时,将显示我的WPF窗口。如果用户关闭窗口,它将被隐藏。在下一次单击托盘图标时,将再次显示相同的窗口。

现在的目标是让窗口的外观变得生动。窗口应从任务栏“向上滑动”。当用户关闭窗口时,它应该“向下滑动”。我目前有一个我不喜欢的解决方案,我想知道是否有更好的方法。我有一个动画,它可以改变布局容器的高度(在这种情况下为网格):

<Storyboard x:Key="BottomUpSlideIn" Completed="BottomUpSlideIn_OnCompleted">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="grid">
            <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="470"/>
        </DoubleAnimationUsingKeyFrames>
</Storyboard>

但它实际上并没有隐藏窗口,只是将其高度设置为零。动画完成后,是否可以将窗口的可见性设置为隐藏?或者你知道一种不同/更好的方法来完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

我在我的第一个应用程序中使用了这个...您可能需要根据您的要求调整Trigger

<Window.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard>
            <Storyboard Name="SlideStoryboard">
                <DoubleAnimation Name="SlideDoubleAnimation" 
                    Storyboard.TargetName="SlideWindow" Storyboard.TargetProperty="Top"
                    Duration="0:0:0.75" Completed="SlideDoubleAnimation_Completed" 
                    AccelerationRatio="0.5" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>

SlideWindowWindow.Name属性的值。

然后对于结束动画,我只是调整了这个DoubleAnimation对象:

private void BeginCloseAnimation()
{
    SlideDoubleAnimation.From = System.Windows.SystemParameters.WorkArea.Height - 
        this.Height - 2;
    SlideDoubleAnimation.To = System.Windows.SystemParameters.WorkArea.Height;        
    SlideStoryboard.Begin();
    close = true;
}

private void SlideDoubleAnimation_Completed(object sender, EventArgs e)
{
    if (close) Close();
}