2017-10-04 57 views
0

一個簡單的事情,一個按鈕,當你點擊它時會打開一個autosuggestbox並讓我專注於它並在移動設備上打開鍵盤,或者只需點擊我自己就可以在「文本區」AutoSuggestBox.focus不能正常工作

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和按鈕移到]

它從第二次工作當我點擊鏈接,使ASbox可見,不是第一次 - 爲什麼?我怎麼能強迫它能夠第一次做到這一點?

感謝所有:}

回答

0

它從第二次工作當我點擊鏈接,使ASbox可見,不是第一次 - 爲什麼?

如果你正在試圖獲得焦點設置方法的返回結果,你會發現,在第一時間AutoSuggestion.Focus回報false,這意味着某些原因控制不可作爲焦點(見方法類的ControlFocus) 。這應該是第一次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; 
}