我的WPF应用程序有一个使用Blend创建的窗口加载动画。实际的动画效果很好,但如果我向窗口加载事件添加逻辑(使用C#),则当窗口最终渲染时,动画会跳到结束。
我最初的计划是使用线程来解决这个问题,但这也没有奏效:
private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 30);
dispatcherTimer.Start();
lstRecipients.Visibility = Visibility.Hidden;
windowAdorner = new TransparentAdorner(BorderGrid);
if (!StaticHelpers.AWSConfigurationExists())
{
this.IsEnabled = false;
GettingStarted gettingStarted = new GettingStarted(this);
gettingStarted.Owner = this;
gettingStarted.ShowDialog();
this.IsEnabled = true;
}
else
{
Task SetAWSLabelsTask = new Task(new Action(() => SetAWSLabels()));
SetAWSLabelsTask.Start();
}
Task bounceHandler = new Task(new Action(() => processBounce()));
bounceHandler.Start();
//processBounce();
Task unSubscribeHandler = new Task(new Action(() => handleUnsubscriptions()));
unSubscribeHandler.Start();
}
我假设系统忙于创建线程,并且创建由UI线程处理,所以在渲染Window时动画已经完成。
我缺少的是一种协调动画的好方法,这样我在MyWindow_Loaded中的任何业务逻辑都只有在动画完成加载后才会出现。
这可能吗?
编辑:我还尝试了线程睡眠,但这也不起作用。
好的,解决了问题。
在XAML中,向情节提要添加了一个新的事件处理程序:
<Storyboard x:Key="SESLogoLoad" Completed="StoryCompleted">
然后使用C#手动创建了一个方法:
private void StoryCompleted(object sender, EventArgs e)
{
//Windows onload stuff goes here...
}