【问题标题】:Item by item scrolling in a WPF Listview在 WPF Listview 中逐项滚动
【发布时间】:2014-04-17 22:54:47
【问题描述】:

我有一个高度很小的列表视图,但有 3-4 个列表视图项目,占据了整个列表视图的大小(因此一次只能显示一个项目)

如果用户滚动它,列表视图不会一次滚动 1 个项目,它一次滚动 2 个项目(单滚动)

你会如何设置它让 1 个滚动 = 一个项目向下/向上?

希望我清楚这一点,如果不告诉我的话。

【问题讨论】:

  • 如果您只想一次显示一个项目,那么为什么要使用 ListView?

标签: c# wpf xaml


【解决方案1】:

我假设您在这里谈论的是 MouseWheel 滚动。

MouseWheel 滚动实际上取决于 IScrollInfo 实现。我建议您在 ScrollViewer 之前自己处理 MouseWheel 事件。所以基本上,您可以执行以下操作:

处理ListBox上的PreviewMouseWheel事件

<ListBox PreviewMouseWheel="ListBox_PreviewMouseWheel" Height="108" Width="100" x:Name="list" >
    <Button Content="Button 1" Height="100"/>
    <Button Content="Button 2" Height="100"/>
    <Button Content="Button 3" Height="100"/>
    <Button Content="Button 4" Height="100"/>
    <Button Content="Button 5" Height="100"/>
    <Button Content="Button 6" Height="100"/>
    <Button Content="Button 7" Height="100"/>
    <Button Content="Button 8" Height="100"/>
    <Button Content="Button 9" Height="100"/>
</ListBox>

在后面的代码中,向下或向上滚动时触发 ScrollBar.LineDownCommandScrollBar.LineUpCommand

private void ListBox_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if (e.Delta > 0)
    {
        ScrollBar.LineDownCommand.Execute(null, e.OriginalSource as IInputElement);
    }
    if (e.Delta < 0)
    {
        ScrollBar.LineUpCommand.Execute(null, e.OriginalSource as IInputElement);
    }
    e.Handled = true;
}

因此,您将 MouseWheel 滚动条转为 LineDown/LineUp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2011-07-06
    • 2019-09-05
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多