Skip to content

Commit

Permalink
Merge commit 'b773d5b8c59677e2f91fed8e8e449655a4af8fcb' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
lindexi committed Aug 18, 2023
2 parents bfeaf5a + b773d5b commit 980fc4e
Showing 1 changed file with 57 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public MainWindow()

i++;
}

InitializeComponent();
}

Expand All @@ -55,6 +55,12 @@ private void ListBox_OnLoaded(object sender, RoutedEventArgs e)
{
var scrollViewer = GetScrollViewer(SlideThumbListBox);
scrollViewer.ScrollChanged += ScrollViewer_ScrollChanged;
ScrollItemChanged += MainWindow_ScrollItemChanged;
}

private void MainWindow_ScrollItemChanged(object? sender, ScrollItemChangedEventArgs e)
{
Debug.WriteLine($"滚动到:{e.ItemDataContext}");
}

public static ScrollViewer? GetScrollViewer(DependencyObject? parent)
Expand Down Expand Up @@ -83,12 +89,14 @@ private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
var scrollViewer = (ScrollViewer) sender;
const int limitMaxValue = 20;

bool outOfScroll = false; // 是否当前命中项已经滚动超过太多了
if (_lastElement is not null)
{
var point = ShowInTop(_lastElement);
if (point.Y > _lastElement.ActualHeight / 2 || point.Y < (-1 * _lastElement.ActualHeight * 0.7))
{
// 超过一半宽度高度了,那就忽略了吧
outOfScroll = true;
}
else
{
Expand All @@ -97,6 +105,9 @@ private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
}
}

object? lastDataItem = null;
FrameworkElement? lastElement = null;

foreach (var item in SlideThumbListBox.ItemContainerGenerator.Items.Reverse())
{
var listItem = SlideThumbListBox.ItemContainerGenerator.ContainerFromItem(item);
Expand All @@ -105,16 +116,42 @@ private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
var translatePoint = ShowInTop(element);

if (translatePoint.Y < limitMaxValue && translatePoint.Y >= 0)
if (translatePoint.Y >= 0)
{
if (translatePoint.Y < limitMaxValue)
{
if (element != _lastElement)
{
_lastElement = element;
//Debug.WriteLine($"滚动到: {item}");
ScrollItemChanged?.Invoke(this, new ScrollItemChangedEventArgs(item, element));
}

return;
}
}
else // 当前项小于零的情况
{
if (element != _lastElement)
// 此时证明上一项目是大于零的情况
if (outOfScroll)
{
_lastElement = element;
Debug.WriteLine($"滚动到: {item}");
//ScrollItemChanged?.Invoke(this, new ScrollItemChangedEventArgs(item, element));
if (lastDataItem != null && lastElement != null)
{
if (lastElement != _lastElement)
{
// 也就是上一项已经是可见状态,而当前 `_lastElement` 却是被滚动走了
_lastElement = lastElement;
//Debug.WriteLine($"滚动到: {lastDataItem}");
ScrollItemChanged?.Invoke(this, new ScrollItemChangedEventArgs(lastDataItem, lastElement));
}

return;
}
}
return;
}

lastDataItem = item;
lastElement = element;
}
}

Expand All @@ -127,6 +164,19 @@ Point ShowInTop(UIElement element)

private FrameworkElement? _lastElement;

public event EventHandler<ScrollItemChangedEventArgs>? ScrollItemChanged;
}

public class ScrollItemChangedEventArgs : EventArgs
{
public ScrollItemChangedEventArgs(object itemDataContext, UIElement itemElement)
{
ItemDataContext = itemDataContext;
ItemElement = itemElement;
}

public object ItemDataContext { get; }
public UIElement ItemElement { get; }
}

public class Model
Expand Down

0 comments on commit 980fc4e

Please sign in to comment.