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驗證方法。 –