Как определить, нужно ли прокручивать ListView в WPF? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть несколько элементов в виде списка в WPF. Я хочу добавить некоторые элементы на следующую «страницу», когда они выходят за пределы области просмотра. Однако, я не хочу доступную прокрутку. Я отключаю прокрутку.

<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled">

Я вообще не хочу прокручивать, я только хочу знать, есть ли какие-либо предметы помимо прокрутки. В настоящее время я ограничиваю список количеством элементов на странице, однако мои элементы имеют разный размер, и я не буду знать размер экрана, поэтому его необходимо настраивать.

1 Ответ

0 голосов
/ 16 ноября 2018

Хотя это решение и работает, оно, похоже, не очень хорошо с точки зрения производительности нужен другой ответ .

Чтобы повысить производительность, я теперь tempNumItemsPerPage = tempNumItemsPerPage -2;

1) Добавлен обработчик событий для прокрутки в конструкторе

public ViewName()
{
    InitializeComponent();

    // Handler to add scroll change event
    Items.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(Items_ScrollChanged));

    Init();            
}

2) Добавил событие в мой список просмотра

<ListView ScrollViewer.ScrollChanged="OrderItems_ScrollChanged">

3) Добавьте прокрученный код

private void OrderItems_ScrollChanged(object sender, ScrollChangedEventArgs scrollChangedEventArgs)
{
    ScrollViewer scrollViewer = Extensions.WPFExtensions.GetChildOfType<ScrollViewer>(Items);

    if (scrollViewer.ComputedHorizontalScrollBarVisibility == Visibility.Visible)
    {
        GetItemsOnPage();

        tempNumItemsPerPage--;               
    }
}

Единственная проблема, с которой я сталкиваюсь, это то, что она каждый раз сбрасывает страницу, видя, выключена ли полоса прокрутки [не видно глазу].

public static class WPFExtensions
{
    public static T GetChildOfType<T>(this DependencyObject depObj)
        where T : DependencyObject
    {
        if (depObj == null) return null;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null) return result;
        }

        return null;

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...