积极答复者
ListBox item的自动滚动

问题
答案
-
你可以通过调用ListBox内部的ScrollViewer 的 ScrollToVerticalOffset / ScrollToEnd / ScrollToHome 等方法控制滚动,还有 PageUp / PageDown控制翻页,LineUp / LineDown控制上下行滚动。
然后你只需要判断滚动条是否见底或者用户鼠标是否进入ListBox,做相应动作。
private void listbox_Loaded(object sender, RoutedEventArgs e) { ListBox list = sender as ListBox; ScrollViewer scrollviewer = GetVisualChild<ScrollViewer>(list); Thread t = new Thread(() => { while (true) { if (!list.IsMouseOver) { if (scrollviewer.VerticalOffset < scrollviewer.ScrollableHeight) scrollviewer.Dispatcher.Invoke(new Action(() => { scrollviewer.LineDown(); })); else scrollviewer.Dispatcher.Invoke(new Action(() => { scrollviewer.ScrollToHome(); })); Thread.Sleep(500); } } }); t.Start(); } public T GetVisualChild<T>(Visual parent) where T : Visual { T child = default(T); int numVisuals = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < numVisuals; i++) { Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); child = v as T; if (child == null) child = GetVisualChild<T>(v); if (child != null) break; } return child; }
例子:
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 huanghy 2012年3月5日 3:34
全部回复
-
你可以通过调用ListBox内部的ScrollViewer 的 ScrollToVerticalOffset / ScrollToEnd / ScrollToHome 等方法控制滚动,还有 PageUp / PageDown控制翻页,LineUp / LineDown控制上下行滚动。
然后你只需要判断滚动条是否见底或者用户鼠标是否进入ListBox,做相应动作。
private void listbox_Loaded(object sender, RoutedEventArgs e) { ListBox list = sender as ListBox; ScrollViewer scrollviewer = GetVisualChild<ScrollViewer>(list); Thread t = new Thread(() => { while (true) { if (!list.IsMouseOver) { if (scrollviewer.VerticalOffset < scrollviewer.ScrollableHeight) scrollviewer.Dispatcher.Invoke(new Action(() => { scrollviewer.LineDown(); })); else scrollviewer.Dispatcher.Invoke(new Action(() => { scrollviewer.ScrollToHome(); })); Thread.Sleep(500); } } }); t.Start(); } public T GetVisualChild<T>(Visual parent) where T : Visual { T child = default(T); int numVisuals = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < numVisuals; i++) { Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); child = v as T; if (child == null) child = GetVisualChild<T>(v); if (child != null) break; } return child; }
例子:
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 huanghy 2012年3月5日 3:34