ListBox+WrapPanel-Taste, navigation
Ich versuche zu erreichen das äquivalent von einer WinForms - ListView
mit seinen View
- Eigenschaft auf View.List
. Optisch sind die folgenden, funktioniert einwandfrei. Die Datei-Namen in meinem Listbox
gehen von oben nach unten, und dann wickeln Sie Sie in eine neue Spalte.
Hier ist die grundlegende XAML, mit dem ich arbeite:
<ListBox Name="thelist"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"
Orientation="Vertical" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Jedoch die default-Taste, die navigation nicht umbrochen wird. Wenn das Letzte Element in einer Spalte ausgewählt ist, drücken Sie den Pfeil nach unten nicht geht auf das erste Element der nächsten Spalte.
Ich habe versucht, die Handhabung der KeyDown
Veranstaltung wie dieser:
private void thelist_KeyDown( object sender, KeyEventArgs e ) {
if ( object.ReferenceEquals( sender, thelist ) ) {
if ( e.Key == Key.Down ) {
e.Handled = true;
thelist.Items.MoveCurrentToNext();
}
if ( e.Key == Key.Up ) {
e.Handled = true;
thelist.Items.MoveCurrentToPrevious();
}
}
}
Dieser erzeugt die last-in-Spalte (first-in-neben-Spalte Verhalten, was ich wollte, sondern produziert auch eine kuriosität in der linken und rechten Pfeil-handling. Jeder Zeit umhüllt von einer Spalte zur nächsten/vorherigen Hilfe der up/down-Pfeile, eine einzelne spätere Nutzung der Links-oder rechts-Taste verschiebt die Auswahl nach Links oder rechts neben dem Element, das ausgewählt wurde, kurz bevor der wrap aufgetreten.
Davon ausgehen, die Liste ist gefüllt mit Saiten "0001" bis "0100" mit 10 strings pro Spalte. Wenn ich mithilfe der nach-unten-Taste, um zu gehen von "0010" auf "0011", und drücken Sie dann die Pfeil-rechts-Taste verschiebt die Auswahl auf "0020", nur auf der rechten Seite von "0010". Wenn "0011" ausgewählt ist und ich die nach-oben-Taste bewegen Sie die Auswahl zu "0010", dann ein drücken der rechten Pfeil-Tasten verschiebt die Auswahl zum "0021" (rechts von "0011", und drücken Sie die linke Pfeiltaste verschiebt die Auswahl auf "0001".
Jede Hilfe die Erreichung der gewünschten Spalte-wrap-layout " und die Pfeiltaste navigation würde geschätzt.
(Änderungen verschoben zu meiner eigenen Antwort, da es technisch eine Antwort.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus, dass, wenn ein Umbruch in meinem Umgang mit der
KeyDown
Veranstaltung, die Auswahl ändert sich das richtige Element, aber Fokus auf die alten Artikel.Hier ist die aktualisierte
KeyDown
- Event-Handler. Wegen der Bindung, dieItems
Sammlung gibt, meine tatsächliche Elemente anstelleListBoxItem
s, so habe ich zu tun, ein Anruf in der Nähe des Ende, um die tatsächlicheListBoxItem
muss ich anrufenFocus()
auf. Geschenkpapier vom letzten Eintrag zum ersten und Umgekehrt kann erreicht werden durch Austausch der Anrufe vonMoveCurrentToLast()
undMoveCurrentToFirst()
.Sollten Sie in der Lage sein, es zu tun, ohne das Ereignis-listener mit KeyboardNavigation.DirectionalNavigation, z.B.