如何设置focus/place克拉到搜索框

How to set focus/place caret to SearchBox

我得到了这个布局:

    <RelativePanel>
        <ButtonContent="&#xE700;" Name="btHumburger"/>
        <Button Content="&#xE0A6;" Name="btBack"/>
        <TextBlock Text="Home" Name="tbHeader"/>
        <Button Content="&#xE11A;" Name="btSearch"/>
        <SearchBox Visibility="Collapsed" Name="asbSearch" LostFocus="asbSearch_LostFocus"/>
    </RelativePanel>

而且我只想在按下按钮 btSearch 时显示 SearchBox,并在失去焦点时隐藏它。在代码隐藏中:

    private void btSearch_Click(object sender, RoutedEventArgs e)
    {
        asbSearch.Visibility = Visibility.Visible;
        asbSearch.Focus(FocusState.Programmatic);

        btHumburger.Visibility = Visibility.Collapsed;
        btBack.Visibility = Visibility.Collapsed;
        tbHeader.Visibility = Visibility.Collapsed;
        btSearch.Visibility = Visibility.Collapsed;
    }

    private void asbSearch_LostFocus(object sender, RoutedEventArgs e)
    {
        asbSearch.Visibility = Visibility.Collapsed;

        btHumburger.Visibility = Visibility.Visible;
        btBack.Visibility = mainFrame.CanGoBack ? Visibility.Visible : Visibility.Collapsed;
        tbHeader.Visibility = Visibility.Visible;
        btSearch.Visibility = Visibility.Visible;
    }

但是 asbSearchasbSearch.Focus(FocusState.Programmatic); 之后没有得到 focused/placed 插入符号,所以 LostFocus 事件不会触发。如何处理?

尝试在设置焦点之前调用 asbSearch.UpdateLayout();

似乎 Visibility 更改没有完全完成,在此之前控件无法获得焦点。