0

我有一个 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>

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

4

1 回答 1

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();
}
于 2013-10-14T16:12:42.507 回答