在WPF中实现一个弹出层自动获取焦点,弹出层实现是通过其UserControl的依赖属性Visibility的绑定实现的,让UserControl上的TextBox获取焦点,初始实现代码如下:
public Visibility IsVisibile
{
get { return (Visibility)GetValue(IsVisibileProperty); }
set { SetValue(IsVisibileProperty, value); }
}
public static readonly DependencyProperty IsVisibileProperty =
DependencyProperty.Register("IsVisibile", typeof(Visibility), typeof(WordsKeyboard), new PropertyMetadata(Visibility.Collapsed,new PropertyChangedCallback((d,e)=>
{
if((Visibility)e.NewValue==Visibility.Visibile)
(d as MainUserControl).textBox.Focus();
})));
但是第一次弹出该层的时候焦点未在textBox上,除了第一次弹出未获取到焦点后面的弹出都获取到了,为了解决第一次弹出层的TextBox未获取到焦点采用了定时器延时的方法,解决方案如下:
///
/// 定义个定时器
///
DispatcherTimer timer = new DispatcherTimer();