2010-02-08 4 views
9

Nachdem Sie ListBox-Element programmgesteuert ausgewählt haben, drücken Sie zweimal die Aufwärts-Taste , um die Auswahl zu verschieben. Irgendwelche Vorschläge?Wenn Sie den Fokus auf ein ListBox-Element setzen, wird die Tastaturnavigation unterbrochen.

Ausblick:

<ListBox Name="lbActions" Canvas.Left="10" Canvas.Top="10" 
       Width="260" Height="180"> 
     <ListBoxItem Name="Open" IsSelected="true" Content="Open"></ListBoxItem> 
     <ListBoxItem Name="Enter" Content="Enter"></ListBoxItem> 
     <ListBoxItem Name="Print" Content="Print"></ListBoxItem> 
</ListBox> 

Code:

public View() 
{ 
    lbActions.Focus(); 
    lbActions.SelectedIndex = 0; //not helps 
    ((ListBoxItem) lbActions.SelectedItem).Focus(); //not helps either 
} 

Antwort

12

Stellen Sie den Fokus auf die List-Box ... den Fokus auf das ausgewählte ListBoxItem. Dies wird das „zwei Tastatureingaben erforderlich“ Problem lösen:

if (lbActions.SelectedItem != null) 
    ((ListBoxItem)lbActions.SelectedItem).Focus(); 
else 
    lbActions.Focus(); 

Wenn Ihre List-Box etwas anderes als ListBoxItem s enthält, können Sie verwenden, um die lbActions.ItemContainerGenerator.ContainerFromIndex(lbActions.SelectedIndex) automatisch ListBoxItem erzeugt zu bekommen.


Wenn Sie dies wollen passieren während Fenster Initialisierung, müssen Sie den Code in das Loaded Ereignis setzen, anstatt in den Konstruktor. Beispiel (XAML):

<Window ... Loaded="Window_Loaded"> 
    ... 
</Window> 

-Code (basierend auf dem Beispiel in Ihrer Frage):

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     lbActions.Focus(); 
     lbActions.SelectedIndex = 0; 
     ((ListBoxItem)lbActions.SelectedItem).Focus(); 
    } 
+0

Ich habe bereits Artikel in XAML "IsSelected =" true ausgewählt "Ich zusätzliche Auswahl im Code, so dass es mehr offensichtlich sein kann, was ich tun will." LbActions.SelectedIndex = 0; ". – StreamT

+0

Meine Antwort funktioniert immer noch, nur den Code * nach * der' SelectedIndex = 0 '. – Heinzi

+0

Funktioniert nicht für mich. Artikel ausgewählt, das ist kein Problem. Tastaturnavigation funktioniert nicht richtig nach. – StreamT

1

Sie können dies auch leicht in XAML tun. Bitte beachten Sie, dass dadurch nur der logische Fokus gesetzt wird.

Zum Beispiel:

<Grid FocusManager.FocusedElement="{Binding ElementName=itemlist, Path=SelectedItem}"> 
    <ListBox x:Name="itemlist" SelectedIndex="1"> 
     <ListBox.Items> 
      <ListBoxItem>One</ListBoxItem> 
      <ListBoxItem>Two</ListBoxItem> 
      <ListBoxItem>Three</ListBoxItem> 
      <ListBoxItem>Four</ListBoxItem> 
      <ListBoxItem>Five</ListBoxItem> 
      <ListBoxItem>Six</ListBoxItem> 
     </ListBox.Items> 
    </ListBox> 
</Grid>