AutoSuggestBox.focus第一次没有工作

时间:2017-10-04 18:09:29

标签: c# user-interface uwp focus autosuggest

一个简单的事情,一个按钮,当你点击它打开一个autosuggestbox并让我专注于它并在移动设备上打开键盘或只是能够在没有单击的情况下在文本"区域内进行写入" ;

Boolean AutoSuggestBoxRicercaOn = true;

public MainPage()
{
    this.InitializeComponent();
    AutoSuggestion.Visibility = Visibility.Collapsed;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (AutoSuggestBoxRicercaOn)
    {
        AutoSuggestion.Visibility = Visibility.Visible;
        AutoSuggestBoxRicercaOn = false;

        AutoSuggestion.Focus(FocusState.Programmatic);
    }
    else
    {
        AutoSuggestion.Visibility = Visibility.Collapsed;
        AutoSuggestBoxRicercaOn = true;
    }
}

[xml是autosuggestbox和buttton]

它是第二次点击按钮使ASbox可见,而不是第一次 - 为什么?我怎么能强迫它第一次也能这样做呢?

感谢所有人:}

1 个答案:

答案 0 :(得分:0)

  

它是第二次点击按钮使ASbox可见,而不是第一次 - 为什么?

如果您尝试获取设置焦点方法的返回结果,您会发现第一次AutoSuggestion.Focus返回false,这意味着由于某些原因控件无法调焦(请参阅Control类的Focus方法。这应该是AutoSuggestBox第一次没有集中注意力的原因。

为什么控件不可调焦,可能是AutoSuggestBox未完成初始化导致的,因为我添加了一点Task.Delay,这是第一次工作。测试代码段如下:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    if (AutoSuggestBoxRicercaOn)
    {
        AutoSuggestion.Visibility = Visibility.Visible;
        AutoSuggestBoxRicercaOn = false;
        await Task.Delay(TimeSpan.FromSeconds(0.05));
        bool setresult = AutoSuggestion.Focus(FocusState.Programmatic);
        System.Diagnostics.Debug.WriteLine("the setting focus result:" + setresult)
    }
    else
    {
        AutoSuggestion.Visibility = Visibility.Collapsed;
        AutoSuggestBoxRicercaOn = true;
    }
}
  

我怎样才能强迫它第一次这样做呢?

您可以将初始Visibility属性设置放在Page_Loaded事件句柄而不是构造函数中。这可以采取相同的效果,第一次可以工作。

<Page
    ...
    mc:Ignorable="d" 
    Loaded="Page_Loaded">

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    AutoSuggestion.Visibility = Visibility.Collapsed;
}