Wie Scroll-Regel immer am Ende der ListView automatisch ohne Fokus in WPF machen?ListView zum letzten Element scrollen WPF C#
Antwort
Verwenden Sie eine angefügte Eigenschaft. Dieser Artikel zeigt Ihnen, wie: http://michlg.wordpress.com/2010/01/17/listbox-automatically-scroll-to-bottom/
Sie diese verwenden können, seine für mich arbeiten:
this.myListView.ScrollIntoView (myListView.Items [myListView.Items.Count-1]);
wenn Sie erweiterte Detail müssen Sie in diesem post
Da @ pduncan Antwort enthält nicht den eigentlichen Code refere kann, hier ist der Code aus dem Link sie von mir mit nur einer geringfügigen Änderung geschrieben:
public class ListBoxExtenders : DependencyObject
{
public static readonly DependencyProperty AutoScrollToEndProperty = DependencyProperty.RegisterAttached("AutoScrollToEnd", typeof(bool), typeof(ListBoxExtenders), new UIPropertyMetadata(default(bool), OnAutoScrollToEndChanged));
/// <summary>
/// Returns the value of the AutoScrollToEndProperty
/// </summary>
/// <param name="obj">The dependency-object whichs value should be returned</param>
/// <returns>The value of the given property</returns>
public static bool GetAutoScrollToEnd(DependencyObject obj)
{
return (bool)obj.GetValue(AutoScrollToEndProperty);
}
/// <summary>
/// Sets the value of the AutoScrollToEndProperty
/// </summary>
/// <param name="obj">The dependency-object whichs value should be set</param>
/// <param name="value">The value which should be assigned to the AutoScrollToEndProperty</param>
public static void SetAutoScrollToEnd(DependencyObject obj, bool value)
{
obj.SetValue(AutoScrollToEndProperty, value);
}
/// <summary>
/// This method will be called when the AutoScrollToEnd
/// property was changed
/// </summary>
/// <param name="s">The sender (the ListBox)</param>
/// <param name="e">Some additional information</param>
public static void OnAutoScrollToEndChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)
{
var listBox = s as ListBox;
if (listBox != null)
{
var listBoxItems = listBox.Items;
var data = listBoxItems.SourceCollection as INotifyCollectionChanged;
var scrollToEndHandler = new System.Collections.Specialized.NotifyCollectionChangedEventHandler(
(s1, e1) =>
{
if (listBox.Items.Count > 0)
{
listBoxItems.MoveCurrentToLast();
listBox.ScrollIntoView(listBoxItems.CurrentItem);
}
});
if ((bool)e.NewValue)
data.CollectionChanged += scrollToEndHandler;
else
data.CollectionChanged -= scrollToEndHandler;
}
}
}
es es geändert MoveCurrentToLast
stattdessen verwenden von dem letzten Punkt mit listBox.Items[listBox.Items.Count - 1];
bekommen. Der Grund dafür (abgesehen davon, dass es sowieso ein wenig sauberer ist) ist, dass es einen Randfall gibt, in dem Sie, wenn Sie doppelte Einträge in einer Liste haben, mit listBox.Items.Count - 1
nicht zum Ende der Liste blättern (es könnte dich sogar in die entgegengesetzte Richtung scrollen!). Es würde stattdessen Sie zu der ersten Instanz dieses Elements scrollen.
Die Antworten von @pduncan und @MattBurland haben beide Probleme, vor allem, dass sie das Verhalten nicht ordnungsgemäß aufheben.
Diese Implementierung speichert den Handler in einer anderen angefügten Eigenschaft, sodass Sie das Verhalten möglicherweise durch eine Bindung ein- und ausschalten können.
Beachten Sie, dass dies für ListView
gilt. Wenn Sie ListBox
verwenden, ändern Sie das Vorkommen ListView
in ListBox
.
public static class ListViewExtensions
{
public static readonly DependencyProperty AutoScrollToEndProperty = DependencyProperty.RegisterAttached("AutoScrollToEnd", typeof(bool), typeof(ListViewExtensions), new UIPropertyMetadata(OnAutoScrollToEndChanged));
private static readonly DependencyProperty AutoScrollToEndHandlerProperty = DependencyProperty.RegisterAttached("AutoScrollToEndHandler", typeof(NotifyCollectionChangedEventHandler), typeof(ListViewExtensions));
public static bool GetAutoScrollToEnd(DependencyObject obj) => (bool)obj.GetValue(AutoScrollToEndProperty);
public static void SetAutoScrollToEnd(DependencyObject obj, bool value) => obj.SetValue(AutoScrollToEndProperty, value);
private static void OnAutoScrollToEndChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)
{
var listView = s as ListView;
if (listView == null)
return;
var source = (INotifyCollectionChanged)listView.Items.SourceCollection;
if ((bool)e.NewValue)
{
NotifyCollectionChangedEventHandler scrollToEndHandler = delegate
{
if (listView.Items.Count <= 0)
return;
listView.Items.MoveCurrentToLast();
listView.ScrollIntoView(listView.Items.CurrentItem);
};
source.CollectionChanged += scrollToEndHandler;
listView.SetValue(AutoScrollToEndHandlerProperty, scrollToEndHandler);
}
else
{
var handler = (NotifyCollectionChangedEventHandler)listView.GetValue(AutoScrollToEndHandlerProperty);
source.CollectionChanged -= handler;
}
}
}
es wie folgt verwendet:
<ListView local:ListViewExtensions.AutoScrollToEnd="{Binding Path=AutoScroll}">
Ich habe es auch eine statische Klasse, wie Sie es nicht instanziiert müssen (auch nicht von DependencyObject
ableiten müssen). Die Umwandlung in INotifyCollectionChanged
wurde geändert, so dass Fehler als Ausnahmen auftreten, nicht als NREs.
Für mich funktionieren diese, wenn jeder Datensatz in der Listbox unterschiedlich ist. Wenn sie gleich sind, scrollt sie einfach zu der ersten Übereinstimmung.
- 1. ListView zum ausgewählten Element scrollen
- 2. Kann nicht programmatisch zum letzten Element in JList scrollen
- 3. (WPF) Animate ListView Element verschieben
- 4. Wpf listview Element Auswahl Ereignis
- 5. Implementieren Endlos scrollen auf ListView
- 6. ListView C# WPF Bindung
- 7. Artikel für Artikel Scrollen in einem WPF Listview
- 8. Zugang benutzerdefinierte Element von WPF Listview
- 9. Python für - Referenz zum letzten Element
- 10. C#/WPF: Drucken einer ListView
- 11. Scrollen zum Start von Xamarin Forms ListView mit Header
- 12. C# ListView Mausrad scrollen ohne Fokus
- 13. WPF ControlTemplate zum Scrollen von TreeView Control
- 14. Vorübergehende Umgehung ListView scrollen
- 15. WPF ListView Ausgewählten Artikel anzeigen
- 16. WPF ListBox Scrollen, um automatisch zu beenden
- 17. WPF: mehrspaltige Listbox/Listview?
- 18. Java JList zum ausgewählten Element scrollen
- 19. UICollectionView Scrollen/Swipe zum nächsten Element swift
- 20. Parallax - Offset-Element (e), zum Scrollen gebunden
- 21. Zum ersten Element von jcarousel scrollen
- 22. Mit WPF scrollt ein ListView nach unten, Scrollen ist langsam
- 23. Iterator zum letzten Element in Std :: Liste
- 24. ListView kann nicht scrollen
- 25. Listview Scrollen UI Glitch
- 26. WPF-ListView: Benutzerdefiniertes Scrolling-Verhalten
- 27. Android Listview - Haltestelle ‚ganz‘ Reihe Position Scrollen
- 28. WPF Listview deaktivieren Auswahl
- 29. Trennzeichen (Teiler) nach dem letzten Element von ListView
- 30. Wie ich Listview-Element Hintergrundfarbe ändern nach Listview-Element HarfNotu Wert in wpf
Dies ist die korrektere Lösung. Es ist auch beeindruckend, dass in WPF mit nur 37 Zeilen (plus Kommentare) etwas erreicht wurde. – Grault
Links werden veraltet, es wäre hilfreich, den Code * in Ihre Antwort einzubeziehen * –