设计页面,左边的是原生态的ListView,右边用ScrollViewer包装:
<Window x:Class="WPFScrollViewer1210.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <StackPanel Orientation="Horizontal"> <ListView Name="listView" Width="200" HorizontalAlignment="Left"></ListView> <StackPanel VerticalAlignment="Center"> <Button Name="btnAdd" Height="30" Width="100" Content="Left Add New" Click="btnAdd_Click"></Button> <Button Name="btnAddRight" Height="30" Width="100" Content="Right Add New" Click="btnAddRight_Click"></Button> </StackPanel> <ScrollViewer Name="scrollbar" VerticalScrollBarVisibility="Auto"> <ListView Name="listViewScroll" PreviewMouseWheel="listViewScroll_PreviewMouseWheel"></ListView> </ScrollViewer> </StackPanel> </Window>后台代码:
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace WPFScrollViewer1210 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { int count = 0; while (count++ < 10) { ListViewItem item = new ListViewItem(); item.Content =string.Concat(listView.Items.Count.ToString() , "." , DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); listView.Items.Add(item); } } private void btnAddRight_Click(object sender, RoutedEventArgs e) { int count = 0; while (count++ < 10) { listViewScroll.Items.Add( new ListViewItem() { Content = listViewScroll.Items.Count.ToString()+ "." + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") }); } scrollbar.ScrollToEnd(); } void listViewScroll_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { scrollbar.ScrollToVerticalOffset(scrollbar.VerticalOffset - e.Delta / 2); e.Handled = true; } } }ScrollViewer控件的其他方法:
scrollbar.ScrollToVerticalOffset(scrollbar.VerticalOffset - e.Delta / 2);这里除了2是为了降低滚轮的敏感度,也可乘以某个倍数以扩大敏感度,其中关于e.Delta的请查看MSDN。
源码下载