Sprache: C#
Diese Methode ermittelt wann der ScrollViewer am Ende einer ListBox ist.
[b]Namespace:[/b]
System.Window.Media.Visual
XAML
[code]<ListBox ScrollViewer.ScrollChanged="c_listBox_ScrollChanged"/>[/code]
private void c_listBox_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
ScrollViewer viewer = GetDescendantByType(BoxedListBox, typeof(ScrollViewer)) as ScrollViewer;
if (viewer.VerticalOffset == viewer.ScrollableHeight)
{ }
}
public Visual GetDescendantByType(Visual element, Type type)
{
if (element == null) return null;
if (element.GetType() == type) return element;
Visual foundElement = null;
if (element is FrameworkElement)
{
(element as FrameworkElement).ApplyTemplate();
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
{
Visual visual = VisualTreeHelper.GetChild(element, i) as Visual;
foundElement = GetDescendantByType(visual, type);
if (foundElement != null)
break;
}
return foundElement;
}
private void c_listBox_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
ScrollViewer viewer = GetDescendantByType(BoxedListBox, typeof(ScrollViewer)) as ScrollViewer;
if (viewer.VerticalOffset == viewer.ScrollableHeight)
{ }
}
public Visual GetDescendantByType(Visual element, Type type)
{
if (element == null) return null;
if (element.GetType() == type) return element;
Visual foundElement = null;
if (element is FrameworkElement)
{
(element as FrameworkElement).ApplyTemplate();
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
{
Visual visual = VisualTreeHelper.GetChild(element, i) as Visual;
foundElement = GetDescendantByType(visual, type);
if (foundElement != null)
break;
}
return foundElement;
}
Alte URL:
/snippet/listbox-scrollviewer-is-on-the-bottom/7983
Warum so kompliziert? Ich habe der Beschreibung nach an das da gedacht:
[code]if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight)
{
MessageBox.Show(„Am Ende…“);
}[/code]
Ich auch… was macht das snippet besser?
Ich habe es für ein Custom Control benötigt.
Zudem ist die „Abkürzung“ auch im Snippet drin. Kann jeder selber entscheiden.