Feedback

ListBox ScrollViewer is on the bottom

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;
        }

3 Kommentare

  1. Warum so kompliziert? Ich habe der Beschreibung nach an das da gedacht:
    [code]if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight)
    {
    MessageBox.Show(„Am Ende…“);
    }[/code]

  2. Ich habe es für ein Custom Control benötigt.
    Zudem ist die „Abkürzung“ auch im Snippet drin. Kann jeder selber entscheiden.