public partial classWindow1 : Window
{public doubleTopFrom
{get; set;
}publicWindow1()
{
InitializeComponent();this.Loaded +=NotificationWindow_Loaded;
}private void NotificationWindow_Loaded(objectsender, RoutedEventArgs e)
{
NotifyData data= this.DataContext asNotifyData;if (data != null)
{
tbContent.Text=data.Content;
tbTitle.Text=data.Title;
}
Window1 self= sender asWindow1;if (self!=null)
{double right=SystemParameters.WorkArea.Right-10;//工作区最右边的值self.Top= TopFrom - 160;
DoubleAnimation animation= newDoubleAnimation();
animation.Duration= new Duration(TimeSpan.FromMilliseconds(500));
animation.From=right;
animation.To= right -self.ActualWidth;
self.BeginAnimation(Window.LeftProperty, animation);
Task.Factory.StartNew(delegate{int seconds = 5;//通知持续5s后消失
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds));//Invoke到主进程中去执行
this.Dispatcher.Invoke(delegate{
animation= newDoubleAnimation();
animation.Duration= new Duration(TimeSpan.FromMilliseconds(500));
animation.Completed+= (s, a) => { self.Close(); };//动画执行完毕,关闭当前窗体
animation.From = right -self.ActualWidth;
animation.To= right;//通知从左往右收回
self.BeginAnimation(Window.LeftProperty, animation);
});
});
}
}private void Button_Click(objectsender, RoutedEventArgs e)
{double right =SystemParameters.WorkArea.Right;
DoubleAnimation animation= newDoubleAnimation();
animation.Duration= new Duration(TimeSpan.FromMilliseconds(500));
animation.Completed+= (s, a) => { this.Close(); };
animation.From= right - this.ActualWidth;
animation.To=right;this.BeginAnimation(Window.LeftProperty, animation);
}
}