private void StartDate_LostFocus(object sender, RoutedEventArgs e)
{
if (!validate())
{
Dispatcher.BeginInvoke(
DispatcherPriority.ContextIdle,
new Action(delegate()
{
StartDate.Focus();
})
});
}
我正在验证WPF应用程序的文本框丢失焦点中的日期。目前,我做了一些日期验证 - 如果验证失败,我将焦点重置到文本框。这是正确的方法吗?WPF窗体验证
它似乎工作正常,我希望我不创建任何问题或内存泄漏与BeginInvoke。
在此先感谢
这个工程,但没有多大意义,对我来说。您正在同步执行UI线程中的实际验证(阻塞UI线程),然后您将焦点移至BeginInvoke(仍为UI线程,但是是异步)的StartDate控件。你确定这是你的目标吗? –
我想说的是,由于您已经在UI线程中同步验证,所以没有必要异步执行Focus()方法。在UI线程中也是如此。我会建议做的异步验证(用户界面或,最好在不同的线程),然后在UI线程中同步设置焦点。 –
我推荐看看['IDataErrorInfo'](http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo.aspx)和['INotifyDataErrorInfo'](http:// msdn。 microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo(v=vs.110).aspx)以获得更多标准的WPF验证方法。 –