private void StartDate_LostFocus(object sender, RoutedEventArgs e)
{
if (!validate())
{
Dispatcher.BeginInvoke(
DispatcherPriority.ContextIdle,
new Action(delegate()
{
StartDate.Focus();
})
});
}
我验证了WPF应用程序文本框丢失焦点的日期。目前,我做了一些日期验证 - 如果验证失败,我将焦点重置到文本框。这是正确的方法吗?
它似乎工作正常,我希望我没有使用BeginInvoke创建任何问题或内存泄漏。
提前致谢
答案 0 :(得分:0)
正如Adi建议的那样,请考虑使用更常用的验证方法。但是,如果您正在处理的应用程序只是为了好玩或只是为了了解WPF的工作原理,请考虑:
此外,在失去焦点之前进行验证(TextChanged可能是一个选项)。像这样:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox validatedTextbox = sender as TextBox;
validatedTextbox.IsEnabled = false;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, ea) => { Thread.Sleep(1000); }; // just to simulate really long validation
worker.RunWorkerCompleted += (s, ea) =>
{
if (validatedTextbox.Text.Contains('a'))
{
validatedTextbox.Background = new SolidColorBrush(Colors.Red);
}
else
{
validatedTextbox.Background = new SolidColorBrush(Colors.Green);
}
validatedTextbox.IsEnabled = true;
};
worker.RunWorkerAsync();
}