2016-01-19 8 views
5

Perché la Listbox salta dall'ultimo record al primo quando premo il tasto freccia su o giù una volta?La selezione della casella di riepilogo non aumenta o diminuisce l'elenco quando si preme il tasto freccia

Ecco come riprodurre questo problema

MainWindow

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ListBox x:Name="MyListbox" 
     ItemsSource="{Binding Entities}" 
     SelectedItem="{Binding SelectedEntity}" /> 
</Window> 

Codice Dietro

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new MainWindowViewModel(); 
     MyListbox.Focus(); 
    } 
} 

ViewModel

public class MainWindowViewModel : NotifyPropertyChanged 
{ 
    public MainWindowViewModel() 
    { 
     Entities = new ObservableCollection<string>() 
     { 
      "Batman", 
      "Superman", 
      "Shrek", 
      "Jack Frost", 
      "Wolverine" 
     }; 
     SelectedEntity = Entities.Last(); 
    } 

    public ObservableCollection<string> Entities { get; set; } 

    private string selectedEntity; 
    public string SelectedEntity 
    { 
     get { return selectedEntity; } 
     set { OnPropertyChanged(ref selectedEntity, value); } 
    } 
} 

ho trovato questo problema in una grande Applicat io e io siamo riusciti a riprodurlo isolatamente nel codice sopra, così quando compare la finestra, Listbox avrà selezionato l'ultimo elemento, se premo il tasto freccia su, salta al primo elemento no a uno precedente. Ho provato Mode TwoWay, UpdateSourceTriggerPropertyChange ecc. Su questo paio di righe di XAML, ma non ha funzionato.

Accade solo all'inizio quando salta in cima e si comporta come dovrebbe, se prendo un mouse e clicco sull'oggetto e poi uso la tastiera funziona anche.

+0

Dal momento che non sono sicuro e non hanno tempo per testare basta partire come commento, ma potresti provare 'KeyboardNavigation.DirectionalNavigation = Cycle' dato che Continua è default e sta dicendo" oh, sei sull'ultima, ovviamente vuoi tornare alla prima a destra? " più o meno. Vale la pena fare uno scatto veloce, in entrambi i casi tornerò indietro, siamo nel bel mezzo di lottare con un sacco di scenari di tastiera con ListBox anche. –

+0

@ Chrishr. Grazie per il tuo commento, tuttavia non risolve questo problema. Quello che succede è che quando sono sull'ultimo e premo Freccia su, salta anche al primo, se ero nel mezzo, quindi non importa se premo Su o Giù, salterà al primo: (, ma solo per la prima volta, dopo che funziona come previsto. Il suggerimento che hai dato ha risposto a una domanda diversa che avevo :) Un sacco di problemi con la tastiera anche qui. – adminSoftDK

risposta

2

Questo accade perché quando si imposta concentrarsi per casella di riepilogo dosent impostare lo stato attivo alla voce selezionata, utilizzare questo codice per impostare il fuoco a voce così ..

<ListBox.Resources> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="FocusManager.FocusedElement" 
           Value="{Binding RelativeSource={RelativeSource Self}}"></Setter>     </Trigger> 
      </Style.Triggers> 
     </Style> 
</ListBox.Resources> 
+0

Grazie per la risposta, funziona benissimo :) – adminSoftDK

+0

Il dover fare cose del genere mi fa davvero riflettere su cosa stava pensando Microsoft quando hanno deciso che WPF era pronto per essere rilasciato. –

Problemi correlati