Как определить, нужно ли прокручивать ListView в WPF?
У меня есть несколько элементов в виде списка в WPF. Я хочу добавить некоторые элементы на следующую "страницу", когда они выходят за пределы области просмотра. Однако, я не хочу доступную прокрутку. Я отключаю прокрутку.
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
Я не хочу прокручивать вообще, я только хочу знать, есть ли предметы за прокруткой. В настоящее время я ограничиваю список количеством элементов на странице, однако мои элементы имеют разный размер, и я не буду знать размер экрана, поэтому его необходимо настраивать.
1 ответ
Хотя это решение и работает, оно, похоже, не очень хорошо с точки зрения производительности. Нужен другой ответ.
Чтобы повысить производительность, я теперь tempNumItemsPerPage = tempNumItemsPerPage -2;
1) Добавлен обработчик событий для scrollchange в конструкторе
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;
}
}