2017-01-31 5 views
0

In meiner MainWindows habe ich eine ListBox. Ich definierte Befehle zu cal, wenn der Benutzer meine Window.InputBindings hoch/runter/del drücken.InputBindings für ListBox überschreiben

Wie kann ich meine ListBox schreiben, um meine Befehle und keinen Standardbefehl zu verwenden?

<Window ...> 
    <Window.InputBindings> 
     <KeyBinding Command="{Binding UndoCommand}" 
        Key="Z" 
        Modifiers="Ctrl"/> 
     <KeyBinding Command="{Binding PrevItemCommand}" 
        Key="Up"/> 
     <KeyBinding Command="{Binding NextItemCommand}" 
        Key="Down"/> 
     <KeyBinding Command="{Binding RemoveCommand}" 
        Key="Delete"/> 
    </Window.InputBindings> 
    <Grid> 
     <ListBox Grid.Row="0" 
       Grid.Column="0" 
       x:Name="listRes" 
       Style="{StaticResource StyleListBox}" 
       ItemsSource="{Binding Results}" 
       SelectedItem="{Binding SelectedItem}"/> 
    </Grid> 
</Window> 

Ich habe Stützpunkte in meine Befehle, werden sie nicht erreicht, wenn ich auf einen Artikel nach dem Klicken verwenden oben/unten. Sie werden erreicht, wenn ich nach dem Klicken auf einen anderen Gegenstand auf/ab gehe.

Edit (erklären letzten Satz):

private ICommand _previtemCommand; 
public ICommand PrevItemCommand 
{ 
    get 
    { 
     if (_previtemCommand == null) 
      _previtemCommand = new RelayCommand(OnPrevItem); 
     return _previtemCommand; 
    } 
} 
private void OnPrevItem() 
{ 
    // Do something 
} 

private ICommand _nextitemCommand; 
public ICommand NextItemCommand 
{ 
    get 
    { 
     if (_nextitemCommand == null) 
      _nextitemCommand = new RelayCommand(OnNextItem); 
     return _nextitemCommand; 
    } 
} 
private void OnNextItem() 
{ 
    // Do something 
} 

A hinzugefügt Stützpunkte auf Funktionen OnNextItem und OnPrevItem.

  • Nach einem Klick auf ein Element in der List-Box (ListBox bekam den Fokus), Auf-/Ab-Tasten ausgewählte Element ändern, aber der Code nicht bricht (meine Funktionen werden nicht genannt)
  • auf einem Scheck Nach einem Klick in meinem Fenster (ListBox verloren den Fokus), Auf-/Ab-Tasten die Code Pausen (meine Funktionen aufgerufen werden)
+0

„Sie werden nicht erreicht wenn ich aufbrauche/d nach dem Klicken auf einen Gegenstand besitzen. Sie werden erreicht, wenn ich nach dem Klicken auf einen anderen Gegenstand nach oben/unten blicke. "Was bedeutet das genau? Könnten Sie bitte Ihr Problem näher erläutern? – mm8

+0

@ mm8 Ich habe meine Frage bearbeitet –

Antwort

1

Versuchen Sie, die KeyBindings auf die ListBox sich zu bewegen:

<ListBox Grid.Row="0" 
       Grid.Column="0" 
       x:Name="listRes" 
       Style="{StaticResource StyleListBox}" 
       ItemsSource="{Binding Results}" 
       SelectedItem="{Binding SelectedItem}"> 
    <ListBox.InputBindings> 
     <KeyBinding Command="{Binding UndoCommand}" Key="Z" Modifiers="Ctrl"/> 
     <KeyBinding Command="{Binding PrevItemCommand}" Key="Up"/> 
     <KeyBinding Command="{Binding NextItemCommand}" Key="Down"/> 
     <KeyBinding Command="{Binding RemoveCommand}" Key="Delete"/> 
    </ListBox.InputBindings> 
</ListBox> 
+0

Es funktioniert, danke. Aber da ist eine Möglichkeit das zu tun ohne Code 2 mal zu schreiben? (on window und auf listbox) –

+0

Kann man nicht einfach die KeyBindings von entfernen? Ansonsten muss man das selbe Markup zweimal schreiben, dh man muss hinzufügen 4 KeyBindings zu der ListBox und weitere 4 KeyBindings zum übergeordneten Fenster – mm8

+0

Ich kann '' Window.Resources ''nicht entfernen', möchte ich den Befehl aufrufen, wenn der Fokus auf anderen Elementen liegt Ich schreibe Code 2 mal und füge hinzu ein Kommentar für sich selbst. Danke –

Verwandte Themen