我有一个名为"验证"的按钮。单击时,它应将其内容更改为"正在验证..."一旦处理完成,它应显示"已验证"。我们该如何实现这一目标?我是wpf的新手。任何帮助将不胜感激。
private void btnVerify_Click(object sender, RoutedEventArgs e)
{
btnVerify.Content = new BitmapImage(new Uri("Verifying.png", UriKind.Relative));
VerifyData(); // this takes almost few seconds to few minutes
btnVerify.Content = new BitmapImage(new Uri("Verified.png", UriKind.Relative));
}
答案 0 :(得分:0)
这里没有多少工作,但我想我可以回答你的问题。正如我所看到的,有几种简单的方法可以做到这一点。
首先,你可以在任何开始的过程结束时再次将按钮的文本更改为“验证”。例如:
OnClick()
{
Button.Text = "Verifying...";
DoSomething();
}
DoSomething()
{
...
Button.Text = "Verify";
}
这种方法的问题在于它快速而且肮脏。它假定您直接通过代码修改视图(用户界面)。它还假设您的DoSomething方法也可以操纵您的View。不是最佳做法,但很简单。
另一种方法是在流程完成时触发事件。您的表单(或ViewModel)可以侦听要触发的事件,然后将按钮的文本值更改回“验证”。这本质上是一种更好的实践,特别是如果您使用的是MVVM之类的东西,并且您在ViewModel中执行此操作。由于您可以从ViewModel获取按钮的文本,因此您可以最初更改它,最后从那里更改。
修改强> 根据您发布的更新信息,您可能会遇到屏幕刷新问题。这很可能是因为您正在执行一个锁定更新的同步过程,直到整个过程完成。解决这个问题的一种方法(黑客)将遵循此处列出的指示:
http://geekswithblogs.net/NewThingsILearned/archive/2008/08/25/refresh--update-wpf-controls.aspx
我宁愿看到你重构这段代码,以便更加线程友好。如果过程花费的时间足够长,你需要在屏幕上看到一个等待指示器(如“验证...”),我建议使用后台工作程序或其他一些异步过程来处理实际工作,以便你的用户界面没有锁定。然而,这是一个更高级的主题,可能超出了您想要作为初学者学习的范围。如果是这样的话,我建议现在就做上述黑客攻击,或者只是解决这个问题。
答案 1 :(得分:0)
因为你是WPF的新手,我假设你没有使用MVVM。在那种情况下:
挂钩到Click
事件和方法:
OnVerifyClick(object sender, RoutedEventArgs e)
{
Button verifyButton = sender as Button;
if(verifyButton == null) { return; }
verifyButton.Content = "Verifying...";
DoProcessing();
verifyButton.Content = "Verified";
}