Ich versuche, das Äquivalent eines WinForms ListView
mit seiner View
Eigenschaft auf View.List
festgelegt zu erreichen. Visuell funktioniert das Folgende gut. Die Dateinamen in meinem Listbox
gehen von oben nach unten und dann zu einer neuen Spalte umbrechen.ListBox + WrapPanel Pfeilschlüssel Navigation
Hier ist der Grund XAML Ich arbeite mit:
<ListBox Name="thelist"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"
Orientation="Vertical" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
jedoch Standard-Pfeiltaste Navigation wickeln nicht. Wenn das letzte Element in einer Spalte ausgewählt ist, wird durch Drücken auf den Abwärtspfeil nicht zum ersten Element der nächsten Spalte gesprungen.
Ich habe versucht, Umgang mit dem KeyDown
Ereignis wie folgt aus:
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();
}
}
}
Dies erzeugt die letzte-in-Spalte zur First-in-next-Spalte Verhalten, das ich wollte, aber auch eine Kuriosität in der linken produziert und rechte Pfeilbehandlung. Jedes Mal, wenn es mit den Aufwärts-/Abwärtspfeilen von einer Spalte zur nächsten/vorherigen springt, verschiebt eine einzelne nachfolgende Verwendung der linken oder rechten Pfeiltaste die Auswahl nach links oder rechts von dem Element, das kurz vor dem Umbrechen ausgewählt wurde.
Angenommen, die Liste wird mit Strings "0001" bis "0100" mit 10 Strings pro Spalte gefüllt. Wenn ich die Abwärtspfeiltaste verwende, um von "0010" zu "0011" zu wechseln, dann drücke die rechte Pfeiltaste, die Auswahl wechselt zu "0020", genau rechts von "0010". Wenn "0011" ausgewählt ist und ich die Auswahltaste mit der Pfeil-nach-oben-Taste auf "0010" verschiebe, wird durch Drücken der rechten Pfeiltaste die Auswahl auf "0021" (rechts von "0011") und ein Linksdruck gesetzt Pfeil bewegt Auswahl auf „0001“.
Jede Hilfe die gewünschte Spalte-wrap-Layout zu erreichen und Pfeil Navigation geschätzt würde.
(Edits auf meine eigene Antwort bewegt, da es technisch eine Antwort.)
Großartig, das hat mir sehr geholfen. ;) – Inferis