2016-12-19 4 views
0

Ich habe meine WPF Combobox geändert, so dass, wenn ich beginne zu tippen filtert die Liste basierend auf Elemente, die die Zeichenfolge enthalten (im Gegensatz zu nur damit beginnen). Sehen Sie ein Beispiel hier:Vermeiden Sie selectItem ändern auf Pfeil drücken

enter image description here

Wenn ich drücken Sie den Pfeil nach unten:

enter image description here

Wie man sieht es nach unten bewegt (weil es die zweite auf der Liste auswählen) . Sobald es jedoch nach unten bewegt wird, ändert es das SelectedItem, wodurch meine Filterfunktion ausgelöst wird. Dadurch wird die Dropdownliste auf Elemente gefiltert, die die Zeichenfolge im Feld enthalten. Da es nur einen mit dem passenden Namen gibt, ist dies jetzt die einzige Wahl, die der Benutzer hat.

Ich brauche eine Möglichkeit, nach unten zu scrollen, ohne das SelectedItem zu ändern oder diese Änderung zumindest nicht in der Textbox widerzuspiegeln.

+0

werden Sie dies von einem Verhalten zu erreichen versuchen, außer Kraft setzen? – Akos

+0

Vorzugsweise ja ein Befehl oder Verhalten –

+0

Sie könnten einen relaycommand mit Parameter hinzufügen, der auf dropdownClosed aufgerufen wird, und das aktuell ausgewählte Element als Parameter senden. Auf diese Weise müssen Sie die Eigenschaft selectedItem nicht binden, und Sie können Ihre Filter vom Ausführen des Befehls auslösen. BEARBEITEN: Ich habe ein Beispielprojekt erstellt, und ich habe keine Änderung der Auswahl, die bei Drücken der Pfeiltaste auftritt. vielleicht können Sie Ihr benutzerdefiniertes Steuerelement bearbeiten, um das Keydown zu handhaben? e.handle wahr bei previewkeydown? – Akos

Antwort

0

Ich glaube nicht, dass es einen direkten Weg gibt, dies zu tun. Der einfachste Weg ist es, eine Klasse zu erstellen, die von der ComboBox XAML Kontrolle erbt, eine neue propery mit genannt IsReadOnly dann können Sie die OnPreviewKeyDown Methode

protected override void OnPreviewKeyDown(KeyEventArgs e) 
      { 
       if (IsReadOnly) 
       { 
        if (e.Key == Key.Down || e.Key == Key.Up) 
        { 
         e.Handled = true; 
         return; // do not call the base class method OnPreviewKeyDown() 
        } 
       } 

       base.OnPreviewKeyDown(e); 
      } 
+0

das hilft nicht, es ändert immer noch den SelectedIndex –

Verwandte Themen