Dlaczego ustawianie fokusu klawiatury za kodem wymaga Dispatcher.BeginInvoke?
mamUserControl
który zawiera aTextBox
. Kiedy kontrola użytkownika staje się widoczna, podajęTextBox
skupiać. Czy ktoś mógłby wyjaśnić, dlaczego muszę to zrobić za pomocąDispatcher
?
public MyUserControl()
{
InitializeComponent();
this.IsVisibleChanged += VisibilityChanged;
}
Przypadek 1 (działa):
private void VisibilityChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
this.Dispatcher.BeginInvoke((Action)delegate
{
Keyboard.Focus(this.InputTextBox);
}, DispatcherPriority.Render);
}
}
Przypadek 2 (nie działa):
private void VisibilityChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
Keyboard.Focus(InputTextBox);
}
}