2011-01-13 48 views
3

我有一個列表框,上面有一個文本框。我想使用箭頭鍵從ListBox導航到TextBox。如何捕獲ListBox中第一個項目上的keyup事件?

其意圖是,如果ListBox中的第一項被選中,並且用戶鍵入,TextBox將獲得焦點。

我幾乎有這個工作,但問題是,當用戶鍵入,SelectedItem更改之前 KeyUp事件引發。這意味着當用戶在列表框中選擇第二個項目時,文本框的導航就會發生。

如何捕獲ListBox中第一個項目上的keyup事件?

<StackPanel> 
<TextBox Name="TextBox1"></TextBox> 
<ListBox Name="ListBox1" KeyUp="ListBox_KeyUp"> 
    <ListBoxItem>a</ListBoxItem> 
    <ListBoxItem>b</ListBoxItem> 
    <ListBoxItem>c</ListBoxItem> 
</ListBox> 
</StackPanel> 


private void ListBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Up) 
     { 
      if (this.ListBox1.SelectedIndex == 0) 
       this.TextBox1.Focus(); 
     } 
    } 
+0

有你想過聽KeyD擁有呢? – Lazarus 2011-01-13 23:56:01

+0

@Lazarus:KeyDown沒有提出:) – 2011-01-13 23:56:52

回答

3

假設你真的要這個,你就可以使用PreviewKeyDown如下:

<StackPanel> 
     <TextBox Name="textBox1"/> 
     <ListBox PreviewKeyDown="ListBox_PreviewKeyDown"> 
      <ListBoxItem Content="Item1" /> 
      <ListBoxItem Content="Item2"/> 
      <ListBoxItem Content="Item3"/> 
     </ListBox> 
    </StackPanel> 

這個代碼隱藏:

private void ListBox_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (sender is ListBox) 
     { 
      var listBox = sender as ListBox; 
      if (listBox.Items.Count > 0) 
      { 
       if (e.Key == Key.Up && listBox.Items.Count > 0 && listBox.SelectedIndex == 0) 
       { 
        textBox1.Focus(); 
        e.Handled = true; 
       } 
      } 
     } 
    } 
相關問題