2012-09-16 28 views
0

在我的應用程序中,用戶可以將項目添加到ListBox。我希望用戶能夠在從AutoCompleteBox中選擇後再添加一個新項目,方法是再次按返回鍵。我認爲在Add按鈕上設置IsDefault屬性爲True就足夠了。如何在選擇項目後將焦點從AutoCompletBox移開?

這是主窗口的代碼看起來像:

<ListBox Name="listBox1" /> 

<Button Name="button1" Content="Add" IsDefault="True" Click="button1_Click" /> 

<my:AutoCompleteBox Name="autoCompleteBox1" 
       IsTextCompletionEnabled="True" 
       PreviewKeyDown="autoCompleteBox1_PreviewKeyDown"/> 

由於設置IsDefault沒有工作,因爲AutoCompleteBox保持焦點本身,我又試圖通過檢查,如果它是在KeyDown事件作出迴應返回鍵被按下並嘗試將焦點設置到按鈕上。

但是按下返回鍵選擇一個項目後沒有觸發KeyDown事件。於是,我終於訂閱了PreviewKeyDown事件,並做到這一點:

public partial class MainWindow : Window 
{ 
    ObservableCollection<string> myCollection = new ObservableCollection<string>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     listBox1.ItemsSource = myCollection; 
     autoCompleteBox1.ItemsSource = new string[] { "item1", "item2", "item3", "item4", "item5" }; 
    } 

    private void autoCompleteBox1_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Return) 
     { 
      button1.Focus(); 
     } 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     if (autoCompleteBox1.SelectedItem != null) 
      myCollection.Add((string)autoCompleteBox1.SelectedItem); 
    } 
} 

但按鈕沒有獲得焦點。我如何將注意力從AutoCompleteBox移開?

+0

嘗試KeyUp事件。 – Paparazzi

+0

感謝@Blam做到了這一點。我如何標記爲答案? – agugglez

+0

發表我的評論作爲答案。謝謝 – Paparazzi

回答

0

使用KeyUp事件。 KeyDown在改變焦點的週期過早。

相關問題