我在 Silverlight 4 中有一个登录页面。我使用 MVVM 来处理与该页面的所有交互。成功登录后,我有一个自定义事件在我的 View 模型中触发,然后是用于导航到主页的代码。我使用事件聚合、发布和订阅在 View 之间导航。
AnimateLoginSuccess(this, null);
//code to navigate to the main page after successful login.
我在我的 View 中处理这个事件,像这样连接它,其中 LoginSuccessStoryboard 是我为一些基本动画创建的 Storyboard:
//constructor of view
public Login(LoginVM vm)
{
InitializeComponent();
DataContext = vm;
thisVM = vm;
vm.AnimateLoginSuccess += new EventHandler(vm_AnimateLoginSuccess);
}
//event handling method in view
void vm_AnimateLoginSuccess(object sender, EventArgs e)
{
LoginSuccessStoryboard.Begin();
}
现在,问题是,即使动画在成功登录后开始,下一行处理在成功登录时移动到不同 View 的操作使得移动到下一个 View 的速度如此之快,以至于它不会'等待动画完成。从而使动画几乎不存在。关于如何使这项工作有任何想法吗?
最佳答案
您可以使用 Completed Storyboard 的事件,在动画结束后导航到您的 View 。向您的 ViewModel 添加一个方法,该方法在动画之后执行以导航到默认的第一个 View 。
public Login(LoginVM vm) {
InitializeComponent();
LoginSuccessStoryboard.Completed += new EventHandler(NavigateToViewAfterAnimation);
DataContext = vm;
thisVM = vm;
vm.AnimateLoginSuccess += new EventHandler(vm_AnimateLoginSuccess);
}
private void NavigateToViewAfterAnimation(object sender, EventArgs e) {
thisVW.NavigateToFirstView(); // Navigates to the first view.
}
关于c# - 在使用 MVVM 更改 Silverlight 4 中的 View 之前等待 Storyboard动画完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558410/