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.)

InformationsquelleAutor Joel B Fant | 2008-09-25
Schreibe einen Kommentar