我有一个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>
但它实际上并没有隐藏窗口,只是将其高度设置为零。动画完成后,是否可以将窗口的可见性设置为隐藏?或者你知道一种不同/更好的方法来完成这项工作吗?
答案 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>
SlideWindow
是Window.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();
}