Sto sviluppando un'applicazione opensource denominata Media Assistant. Ho usato un ListBox per mostrare la libreria. ItemsSource è associato a un elenco di LibraryItem. Ecco lo XALM.Il ListBox WPF scorre verso l'alto quando cambio messaggio di stato o mostra schermata di attesa
<ListBox Name="Tree" DockPanel.Dock="Top"
ItemsSource="{Binding DataSource.OrderedLibraryItems}"
Background="{StaticResource LibraryBackground}"
Width="220" HorizontalAlignment="Left"
BorderThickness="0"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Standard"
ScrollViewer.IsDeferredScrollingEnabled="True"
ItemTemplate="{StaticResource ListLibraryItemTemplate}"
SelectionMode="Single"
MouseDoubleClick="HandleMouseDoubleClick"
/>
Il problema si verifica quando viene visualizzato un messaggio di stato nella parte inferiore della finestra da un thread utilizzando Dispatcher.
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background,new ParameterizedThreadStart(action), state);
Il ListBox scorre verso l'alto. Se non mostro alcun messaggio di stato, allora funziona bene. Il datacontext o gli elementi dell'elenco o lo stato attivo non sono stati modificati. Non ho trovato alcuna ragione per cui lo stia facendo. Succede quando visualizzo una schermata di attesa che è una finestra non modale. Non potrei ricrearlo in un progetto diverso. Here è il codice sorgente di Media Assistant. È possibile ricrearlo facilmente annullando il commento dell'istruzione return del metodo SetStatusMessage alla classe BackgroundScanner.
ho avuto qualcosa di simile e tutto quello che posso immaginare è l'interfaccia utente ha voluto l'elemento selezionato in vista. Se l'indice era -1, allora provò a mostrare 0. Non stavo usando un messaggio di Dispatcher ma se metto il TextBlock sopra il ListBox ho avuto più fortuna ma non l'ho mai fatto funzionare fino in fondo. Con un controllo ListView ho ottenuto un comportamento migliore. ListBox è veloce e mi piace molto ma fa cose che non ho capito. Senza lo scrolling differito ottieni lo stesso comportamento? Se la tua modalità di rilegatura è su strada, dichiarala. – Paparazzi