控件变为可见时以编程方式设置焦点

fip*_*n88 1 c# xaml focus autosuggest windows-10-mobile

我有一个AutoSuggestBox只在我点击一个按钮时显示.当AutoSuggestBox变得可见时,它也应该获得焦点.

我尝试了很多方法,但没有一个工作.

我的代码:

 <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"/>
Run Code Online (Sandbox Code Playgroud)

代码背后:

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

我试图把它放在代码隐藏中searchButton_Click,但AutoSearchBar控件只出现而且没有集中.

         AutoSearchBar.Focus(FocusState.Keyboard);
         AutoSearchBar.Focus(FocusState.Pointer);
         AutoSearchBar.Focus(FocusState.Programmatic);
Run Code Online (Sandbox Code Playgroud)

Bar*_*art 7

有时XAML for Windows 10(和8.1 RT)表现得很奇怪.引入一小段延迟通常可以解决问题.我试图通过任务工厂运行它,它可以在我的机器(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)));
}
Run Code Online (Sandbox Code Playgroud)