fipcurren88
fipcurren88

Reputation: 711

Programmatically set focus when a control becomes visible

I have an AutoSuggestBox which is only shown when I click a button. When the AutoSuggestBox becomes visible it should also receive focus.

I tried many ways but none of them worked.

The code I have:

 <AutoSuggestBox x:Name="AutoSearchBar" 
      HorizontalAlignment="Right" 
      VerticalAlignment="Center" 
      PlaceholderText="Text to find" 
      Visibility="Collapsed"/>

 <Button x:Name="searchButton" 
      Visibility="Visible" 
      HorizontalAlignment="Right"
      FontFamily="Segoe MDL2 Assets" 
      Background="Red"
      Content="&#xE094;"
      Click="searchButton_Click"/>

Code Behind:

  private void searchButton_Click(object sender, RoutedEventArgs e)
  {
      AutoSearchBar.Visibility = Visibility.Visible;
      searchButton.Visibility = Visibility.Collapsed;
  }

I tried to put this in code-behind searchButton_Click, but the AutoSearchBar control only appears and is not focused.

         AutoSearchBar.Focus(FocusState.Keyboard);
         AutoSearchBar.Focus(FocusState.Pointer);
         AutoSearchBar.Focus(FocusState.Programmatic);

Upvotes: 1

Views: 2127

Answers (1)

Bart
Bart

Reputation: 10015

Sometimes XAML for Windows 10 (and 8.1 RT) behaves oddly. Bringing in a small delay usually fixes it. I've tried to run it through a Task factory and it works on my machine (TM).

private void searchButton_Click(object sender, RoutedEventArgs e)
{
    searchButton.Visibility = Visibility.Collapsed;
    AutoSearchBar.Visibility = Visibility.Visible;

    // slightly delay setting focus
    Task.Factory.StartNew(
        () => Dispatcher.RunAsync(CoreDispatcherPriority.Low,
            () => AutoSearchBar.Focus(FocusState.Programmatic)));
}

Upvotes: 7

Related Questions