在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未获取到焦点采用了定时器延时的方法,解决方案如下: